Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Developer from '@site/src/assets/developer.svg';
import TenantMemberManagement from '@site/src/assets/gear.svg';
import PricingAndBilling from '@site/src/assets/key.svg';
import McpIcon from '@site/src/assets/mcp.svg';
import TenantAutomation from '@site/src/assets/robot.svg';
import CustomDomains from '@site/src/assets/search.svg';
import SystemLimit from '@site/src/assets/security.svg';

Expand Down Expand Up @@ -51,7 +52,7 @@ Wenn du Fragen zu Cloud-Diensten hast und zusätzliche Unterstützung benötigst
label: 'Eigene Domains',
href: '/logto-cloud/custom-domain',
description:
'Verwende deine eigene Domain für deinen Logto-Mandanten, um ein konsistentes Branding in deiner Endbenutzererfahrung zu gewährleisten.',
'Nutze deine eigene Domain für deinen Logto-Mandanten, um ein konsistentes Branding für deine Endnutzererfahrung zu gewährleisten.',
customProps: {
icon: <CustomDomains />,
},
Expand All @@ -75,6 +76,16 @@ Wenn du Fragen zu Cloud-Diensten hast und zusätzliche Unterstützung benötigst
icon: <SystemLimit />,
},
},
{
type: 'link',
label: 'Mandantenverwaltung automatisieren',
href: '/logto-cloud/automate-tenant-creation',
description:
'Erstelle und verwalte Mandanten programmatisch mit Logto Cloud API und Management API.',
customProps: {
icon: <TenantAutomation />,
},
},
{
type: 'link',
label: 'Logto MCP Server',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
---
id: automate-tenant-creation
title: Mandantenverwaltung automatisieren
sidebar_position: 8
---

# Mandantenverwaltung automatisieren

Du kannst Logto Cloud Mandanten programmatisch verwalten, einschließlich der Erstellung von Mandanten und der weiteren Konfiguration, ohne zur Konsole wechseln zu müssen.

Dies ist nützlich, wenn du Mandanten aus deinem eigenen Onboarding-Flow, einer internen Plattform, einem KI-Agenten oder einer Integrationsautomatisierung bereitstellen musst.

Der Automatisierungsablauf ist:

1. Verwende ein **Logto Cloud Personal Access Token (PAT)**, um die Logto Cloud API aufzurufen.
2. Erstelle einen Mandanten mit `POST /api/tenants`.
3. Lies die Standard-Maschine-zu-Maschine (M2M) Anwendungs-Zugangsdaten aus der Antwort zur Erstellung aus.
4. Verwende die Standard-M2M-Anwendung, um ein Management API Zugangstoken für den neuen Mandanten zu erhalten.
5. Rufe die Management API des neuen Mandanten auf, um die Bereitstellung von Anwendungen, Benutzern, Rollen, Ressourcen, Organisationen und anderen Einstellungen fortzusetzen.

## Bevor du beginnst \{#before-you-start}

Bereite die folgenden Werte vor:

| Variable | Beschreibung |
| -------------------- | -------------------------------------------------------------------------------- |
| `CLOUD_API_ENDPOINT` | Der Logto Cloud API-Endpunkt. Für Logto Cloud verwende `https://cloud.logto.io`. |
| `LOGTO_CLOUD_PAT` | Ein PAT für dein Logto Cloud Konto. |
| `TENANT_NAME` | Der Anzeigename des zu erstellenden Mandanten. |
| `TENANT_TAG` | Der Mandantentyp. Verwende `development` oder `production`. |
| `REGION_NAME` | Die Regionskennung für den Mandanten. |

Setze sie als Umgebungsvariablen:

```bash
export CLOUD_API_ENDPOINT="https://cloud.logto.io"
export LOGTO_CLOUD_PAT="<logto-cloud-pat>"
export TENANT_NAME="Mein automatisierter Mandant"
export TENANT_TAG="development"
export REGION_NAME="<region-name>"
```

## Verfügbare Regionen abrufen \{#get-available-regions}

Bevor du einen Mandanten erstellst, rufe die für dein Logto Cloud Konto verfügbaren Regionen ab:

```bash
curl "$CLOUD_API_ENDPOINT/api/me/regions" \
-H "Authorization: Bearer $LOGTO_CLOUD_PAT"
```

Die Antwort enthält die verfügbaren Regionen. Verwende den Wert von `name` als `REGION_NAME`, wenn du den Mandanten erstellst.

Beispielantwort:

```json
{
"regions": [
{
"name": "EU",
"displayName": "Europe"
},
{
"name": "US",
"displayName": "United States"
}
]
}
```

## Einen Mandanten erstellen \{#create-a-tenant}

Rufe `POST /api/tenants` mit dem Logto Cloud PAT auf:

```bash
curl "$CLOUD_API_ENDPOINT/api/tenants" \
-X POST \
-H "Authorization: Bearer $LOGTO_CLOUD_PAT" \
-H "Content-Type: application/json" \
-d '{
"name": "'"$TENANT_NAME"'",
"tag": "'"$TENANT_TAG"'",
"regionName": "'"$REGION_NAME"'"
}'
```

Die Antwort enthält den erstellten Mandanten und eine Standard-M2M-Anwendung. Die M2M-Anwendung wird im neuen Mandanten erstellt und hat Zugriff auf die Management API des Mandanten.

Beispielantwort:

```json
{
"id": "new-tenant-id",
"name": "Mein automatisierter Mandant",
"tag": "development",
"indicator": "https://new-tenant-id.logto.app",
"regionName": "EU",
"defaultApplication": {
"id": "default-m2m-app-id",
"secret": "default-m2m-app-secret"
}
}
```

Speichere die Werte, die du für den nächsten Schritt benötigst:

```bash
export TENANT_ID="<response.id>"
export TENANT_ENDPOINT="<response.indicator>"
export DEFAULT_M2M_APP_ID="<response.defaultApplication.id>"
export DEFAULT_M2M_APP_SECRET="<response.defaultApplication.secret>"
```

## Ein Management API Zugangstoken für den neuen Mandanten erhalten \{#get-a-management-api-access-token-for-the-new-tenant}

Verwende die Zugangsdaten der Standard-M2M-Anwendung, um ein Zugangstoken vom neuen Mandanten anzufordern:

```bash
curl "$TENANT_ENDPOINT/oidc/token" \
-X POST \
-u "$DEFAULT_M2M_APP_ID:$DEFAULT_M2M_APP_SECRET" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "resource=$TENANT_ENDPOINT/api" \
-d "scope=all"
```

Beispielantwort:

```json
{
"access_token": "eyJ...",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "all"
}
```

Speichere das Zugangstoken:

```bash
export MANAGEMENT_API_ACCESS_TOKEN="<response.access_token>"
```

## Die Bereitstellung des neuen Mandanten fortsetzen \{#continue-provisioning-the-new-tenant}

Verwende das Management API Zugangstoken, um die Management API des neuen Mandanten aufzurufen.

Zum Beispiel, um Anwendungen aufzulisten:

```bash
curl "$TENANT_ENDPOINT/api/applications" \
-H "Authorization: Bearer $MANAGEMENT_API_ACCESS_TOKEN"
```

Oder um eine Anwendung zu erstellen:

```bash
curl "$TENANT_ENDPOINT/api/applications" \
-X POST \
-H "Authorization: Bearer $MANAGEMENT_API_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Meine Web-App",
"type": "SPA",
"oidcClientMetadata": {
"redirectUris": ["https://example.com/callback"],
"postLogoutRedirectUris": ["https://example.com"]
}
}'
```

An diesem Punkt kann deine Automatisierung mit jeder Management API-Operation fortfahren, wie z. B. dem Erstellen von Benutzern, Anwendungen, API-Ressourcen, Rollen, Organisationen, Connectors oder Einstellungen für die Anmeldeerfahrung.

## Vollständiges Automatisierungsbeispiel \{#full-automation-example}

Das folgende Node.js-Beispiel erstellt einen Mandanten, tauscht die zurückgegebenen Standard-M2M-Zugangsdaten gegen ein Management API Zugangstoken aus und listet Anwendungen im neuen Mandanten auf:

```js
const cloudApiEndpoint = 'https://cloud.logto.io';
const logtoCloudPat = process.env.LOGTO_CLOUD_PAT;

const createTenantResponse = await fetch(`${cloudApiEndpoint}/api/tenants`, {
method: 'POST',
headers: {
authorization: `Bearer ${logtoCloudPat}`,
'content-type': 'application/json',
},
body: JSON.stringify({
name: 'Mein automatisierter Mandant',
tag: 'development',
regionName: 'EU',
}),
});

if (!createTenantResponse.ok) {
throw new Error(`Fehler beim Erstellen des Mandanten: ${await createTenantResponse.text()}`);
}

const tenant = await createTenantResponse.json();
const tenantEndpoint = tenant.indicator;
const { id: appId, secret: appSecret } = tenant.defaultApplication;

const tokenResponse = await fetch(`${tenantEndpoint}/oidc/token`, {
method: 'POST',
headers: {
authorization: `Basic ${Buffer.from(`${appId}:${appSecret}`).toString('base64')}`,
'content-type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
grant_type: 'client_credentials',
resource: `${tenantEndpoint}/api`,
scope: 'all',
}),
});

if (!tokenResponse.ok) {
throw new Error(`Fehler beim Abrufen des Management API Tokens: ${await tokenResponse.text()}`);
}

const { access_token: managementApiAccessToken } = await tokenResponse.json();

const applicationsResponse = await fetch(`${tenantEndpoint}/api/applications`, {
headers: {
authorization: `Bearer ${managementApiAccessToken}`,
},
});

if (!applicationsResponse.ok) {
throw new Error(`Fehler beim Auflisten der Anwendungen: ${await applicationsResponse.text()}`);
}

const applications = await applicationsResponse.json();

console.log({ tenantId: tenant.id, applications });
```

## Verwandte Ressourcen \{#related-resources}

- [Personal Access Token](/user-management/personal-access-token)
- [Mit Management API interagieren](/integrate-logto/interact-with-management-api)
- [Maschine-zu-Maschine Schnellstart](/quick-starts/m2m)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Developer from '@site/src/assets/developer.svg';
import TenantMemberManagement from '@site/src/assets/gear.svg';
import PricingAndBilling from '@site/src/assets/key.svg';
import McpIcon from '@site/src/assets/mcp.svg';
import TenantAutomation from '@site/src/assets/robot.svg';
import CustomDomains from '@site/src/assets/search.svg';
import SystemLimit from '@site/src/assets/security.svg';

Expand Down Expand Up @@ -31,7 +32,7 @@ Si tienes alguna pregunta sobre los servicios en la nube y necesitas soporte adi
label: 'Política de retención de datos del tenant de desarrollo',
href: '/logto-cloud/dev-tenant-data-retention',
description:
'Comprende la política de retención de usuarios por 90 días en el tenant de desarrollo y cómo usar Logto dev tenant de manera efectiva.',
'Entiende la política de retención de usuarios por 90 días para tenants de desarrollo y cómo usar Logto dev tenant de manera efectiva.',
customProps: {
icon: <Developer />,
},
Expand All @@ -51,7 +52,7 @@ Si tienes alguna pregunta sobre los servicios en la nube y necesitas soporte adi
label: 'Dominios personalizados',
href: '/logto-cloud/custom-domain',
description:
'Utiliza tu propio dominio para tu tenant de Logto y mantén la coherencia de marca en la experiencia de usuario final.',
'Utiliza tu propio dominio para tu tenant de Logto y mantén la coherencia de marca en la experiencia del usuario final.',
customProps: {
icon: <CustomDomains />,
},
Expand All @@ -60,7 +61,7 @@ Si tienes alguna pregunta sobre los servicios en la nube y necesitas soporte adi
type: 'link',
label: 'Facturación y precios',
href: '/logto-cloud/billing-and-pricing',
description: 'Comprende fácilmente tu factura y gestiona tu suscripción con confianza.',
description: 'Entiende fácilmente tu factura y gestiona tu suscripción con confianza.',
customProps: {
icon: <PricingAndBilling />,
},
Expand All @@ -70,17 +71,27 @@ Si tienes alguna pregunta sobre los servicios en la nube y necesitas soporte adi
label: 'Límite del sistema',
href: '/logto-cloud/system-limit',
description:
'Comprende los límites del sistema y la protección de tasas para tenants Dev, Pro y Enterprise.',
'Comprende los límites del sistema y la protección de tasa para tenants Dev, Pro y Enterprise.',
customProps: {
icon: <SystemLimit />,
},
},
{
type: 'link',
label: 'Automatiza la gestión del tenant',
href: '/logto-cloud/automate-tenant-creation',
description:
'Crea y gestiona tenants programáticamente con Logto Cloud API y Management API.',
customProps: {
icon: <TenantAutomation />,
},
},
{
type: 'link',
label: 'Logto MCP Server',
href: '/logto-cloud/logto-mcp-server',
description:
'Conecta herramientas de IA e IDEs a Logto Cloud mediante MCP para gestionar recursos e integrar autenticación.',
'Conecta herramientas de IA e IDEs a Logto Cloud vía MCP para gestionar recursos e integrar autenticación.',
customProps: {
icon: <McpIcon />,
},
Expand Down
Loading
Loading