mirror of
https://github.com/andwati/zitadel.git
synced 2026-11-06 22:32:16 +00:00
## Todos for release - [x] Configure Env in docs project on vercel - [x] Configure Root Path in the docs project on vercel - [ ] Remove old CSP https://github.com/zitadel/website/pull/1592 ## What we did This pull request migrates the project documentation from the old `docs/` directory to the new `apps/docs/` directory, introduces a new documentation system built with Next.js and Fumadocs, and updates all relevant references, configuration files, and documentation to reflect this change. It also adds new configuration and ignore files for the new documentation app, updates CI and linting to exclude the new docs from certain checks, and revises the contributing guidelines accordingly. **Documentation System Migration and New Docs App** * Migrated all documentation from `docs/` to `apps/docs/`, and updated all references in `README.md`, `CONTRIBUTING.md`, and other files to point to the new location. [[1]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L585-L640) [[2]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L660-R607) [[3]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L740-R687) [[4]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L2-R3) [[5]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L30-R30) * Added a new Next.js/Fumadocs-based documentation app under `apps/docs/`, including core app files, layouts, routing, search API, and a comprehensive `README.md` with development and contribution instructions. [[1]](diffhunk://#diff-5a1b07344a2c1b4d3f37b23ff1388b62cd9f57dea3c1cd23d8a0412b7602b132R1-R74) [[2]](diffhunk://#diff-462b9ad1eabbb7d1c29bb9c36e4931eb180fd7190900e6d2babf8f4d66ad1c28R1-R39) [[3]](diffhunk://#diff-e16ae25660ded787b10ac35dea96d5ecaacf895dae0afc8a9bd4382dc79a8c87R1-R7) [apps/docs/app/[[...slug]]/layout.tsxR1-R81](diffhunk://#diff-59e08acde4e805b7aeccef1dcf98f1d71dfc550777e6b9402085cee0e9fa4e0aR1-R81), [apps/docs/app/[[...slug]]/page.tsxR1-R79](diffhunk://#diff-e5df3f80d0fa01e12d63d81f29c57a9d14e846c78fd3beabb2ef768e38fd9580R1-R79), [[4]](diffhunk://#diff-389b34918e040cacaa87cd7201ffa462cc2b0b716736f537e3d3c660ac69353bR1-R7) [[5]](diffhunk://#diff-d3b03416d1c457b19f1c27b26f2db741412df841b875c26ccadc36e4522247f4R1-R29) [[6]](diffhunk://#diff-c8fb8339570a5305809be7c618e14705fd86390dc278e6ce8ba224a7bc8b0c3cR1-R25) **Configuration and Tooling Updates** * Updated `.github/workflows/codeql.yml`, `.golangci.yaml`, and `.github/dependabot.yml` to properly handle the new docs app: excluded `apps/docs` from certain checks, added npm dependency updates for the docs app, and excluded generated content. [[1]](diffhunk://#diff-12783128521e452af0cfac94b99b8d250413c516ec71fe6d97dbea666ff7ba27L8-R14) [[2]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R5-R6) [[3]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R126-R129) [[4]](diffhunk://#diff-dd4fbda47e51f1e35defb9275a9cd9c212ecde0b870cba89ddaaae65c5f3cd28R89-R106) * Updated `.devcontainer/devcontainer.json` to use the latest Go 1.25.3 version for consistency. **Licensing and Miscellaneous** * Added `apps/docs/` to the list of licensed directories in `LICENSING.md`. These changes ensure the documentation is now maintained in a modern, scalable system and all project tooling is updated to support the new structure. --------- Co-authored-by: Federico Coppede <[email protected]>
188 lines
5.1 KiB
Plaintext
188 lines
5.1 KiB
Plaintext
---
|
|
title: Access ZITADEL System API
|
|
sidebar_label: System API
|
|
---
|
|
|
|
<Callout>
|
|
This guide focuses on the ZITADEL System API. To access the other APIs (Admin, Auth, Management), please checkout [this guide](./access-zitadel-apis).
|
|
The ZITADEL System API is currently only available for ZITADEL Self-Hosted deployments.
|
|
</Callout>
|
|
|
|
## System API User
|
|
|
|
The System API works superordinate over all instances. Therefore, you need to define a separate users to get access to this API.
|
|
You can do so by customizing the [runtime configuration](/self-hosting/manage/configure/configure#runtime-configuration-file).
|
|
|
|
To authenticate the user a self-signed JWT will be created and utilized.
|
|
|
|
You can define any id for your user. This guide will assume it's `system-user-1`.
|
|
|
|
**NOTE:** system user id cannot contain capital letters
|
|
|
|
## Generate an RSA keypair
|
|
|
|
Generate an RSA private key with 2048 bit modulus:
|
|
|
|
```bash
|
|
openssl genrsa -traditional -out system-user-1.pem 2048
|
|
```
|
|
|
|
and export a public key from the newly created private key:
|
|
|
|
```bash
|
|
openssl rsa -in system-user-1.pem -outform PEM -pubout -out system-user-1.pub
|
|
```
|
|
|
|
## Runtime Configuration
|
|
|
|
Provide the **public** key to the ZITADEL runtime configuration.
|
|
|
|
Either with the path to the key:
|
|
|
|
```yaml
|
|
SystemAPIUsers:
|
|
- system-user-1:
|
|
Path: /system-user-1.pub
|
|
```
|
|
|
|
or with a base64 encoded value of the key:
|
|
|
|
```yaml
|
|
SystemAPIUsers:
|
|
- system-user-1:
|
|
KeyData: <base64 encoded value of system-user-1.pub>
|
|
```
|
|
|
|
You can define memberships for the user as well:
|
|
|
|
```yaml
|
|
SystemAPIUsers:
|
|
- system-user-1:
|
|
Path: /system-user-1.pub
|
|
Memberships:
|
|
# MemberType System allows the user to access all APIs for all instances or organizations
|
|
- MemberType: System
|
|
Roles:
|
|
- "SYSTEM_OWNER"
|
|
- "IAM_OWNER"
|
|
- "ORG_OWNER"
|
|
# MemberType IAM and Organization let you restrict access to a specific instance or organization by specifying the AggregateID
|
|
- MemberType: IAM
|
|
Roles: "IAM_OWNER"
|
|
AggregateID: "123456789012345678"
|
|
- MemberType: Organization
|
|
Roles: "ORG_OWNER"
|
|
AggregateID: "123456789012345678"
|
|
- superuser2:
|
|
# If no memberships are specified, the user has a membership of type System with the role "SYSTEM_OWNER"
|
|
KeyData: <base64 encoded key> # or you can directly embed it as base64 encoded value
|
|
```
|
|
|
|
If you don't specify any memberships, you are allowed to access the whole [ZITADEL System API](/reference/api/system).
|
|
|
|
## Generate JWT
|
|
|
|
Similar to the OAuth 2.0 JWT Profile, we will create and sign a JWT. For this API, the JWT will not be used to authenticate against ZITADEL Authorization Server, but rather directly to the API itself.
|
|
|
|
The JWT payload will need to contain the following claims:
|
|
|
|
```json
|
|
{
|
|
"iss": "<userid>",
|
|
"sub": "<userid>",
|
|
"aud": "<https://${CUSTOM_DOMAIN}>",
|
|
"exp": <now+1h>,
|
|
"iat": <now>
|
|
}
|
|
```
|
|
|
|
So for your instance running on `custom-domain.com` the claims could look like this:
|
|
|
|
```json
|
|
{
|
|
"iss": "system-user-1",
|
|
"sub": "system-user-1",
|
|
"aud": "https://custom-domain.com",
|
|
"iat": 1659957184,
|
|
"exp": 1659960784
|
|
}
|
|
```
|
|
|
|
<Callout>
|
|
If your system is exposed without TLS or on a dedicated port, be sure to provide this in your audience, e.g. http://localhost:8080
|
|
</Callout>
|
|
|
|
### ZITADEL Tools
|
|
|
|
If you want to manually create a JWT for a test, you can also use our [ZITADEL Tools](https://github.com/zitadel/zitadel-tools). Download the latest release and run:
|
|
|
|
```bash
|
|
zitadel-tools key2jwt --audience=https://custom-domain.com --key=system-user-1.pem --issuer=system-user-1
|
|
```
|
|
|
|
## Call the System API
|
|
|
|
Now that you configured ZITADEL and created a JWT, you can call the System API and authenticate using the token:
|
|
|
|
```bash
|
|
curl --request POST \
|
|
--url ${CUSTOM_DOMAIN}/system/v1/instances/_search \
|
|
--header 'Authorization: Bearer {token}' \
|
|
--header 'Content-Type: application/json'
|
|
```
|
|
|
|
You should get a successful response with a `totalResult` number of 1 and the details of your instance:
|
|
|
|
```json
|
|
{
|
|
"details": {
|
|
"totalResult": "1"
|
|
},
|
|
"result": [
|
|
{
|
|
"id": "172698969497928101",
|
|
"details": {
|
|
"sequence": "102",
|
|
"creationDate": "2022-08-02T09:30:10.781068Z",
|
|
"changeDate": "2022-08-02T09:30:10.781068Z",
|
|
"resourceOwner": "172698969497928101"
|
|
},
|
|
"state": "STATE_RUNNING",
|
|
"name": "ZITADEL",
|
|
"domains": [
|
|
{
|
|
"details": {
|
|
"sequence": "108",
|
|
"creationDate": "2022-08-02T09:30:10.781068Z",
|
|
"changeDate": "2022-08-02T09:30:10.781068Z",
|
|
"resourceOwner": "172698969497928101"
|
|
},
|
|
"domain": "custom-domain.com",
|
|
"primary": true
|
|
},
|
|
{
|
|
"details": {
|
|
"sequence": "108",
|
|
"creationDate": "2022-08-02T09:30:10.781068Z",
|
|
"changeDate": "2022-08-02T09:30:10.781068Z",
|
|
"resourceOwner": "172698969497928101"
|
|
},
|
|
"domain": "zitadel-gnft7o.custom-domain.com",
|
|
"generated": true
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Summary
|
|
|
|
* Create an RSA keypair
|
|
* Provide the public key with a userID to ZITADEL using the runtime configuration
|
|
* Authorize the request with a JWT signed with your private key
|
|
|
|
Where to go from here:
|
|
|
|
* [ZITADEL API Documentation](/apis/introduction)
|