FoxIDs Control API
Control API ist eine REST API mit einer online Swagger (OpenAPI) Interface Beschreibung und Swagger UI.
Wenn Sie FoxIDs self hosten, wird das Swagger (OpenAPI) Dokument in FoxIDs Control unter .../api/swagger/v2/swagger.json und Swagger UI unter .../api/swagger bereitgestellt.
API-Referenz
Swagger beschreibt die exakten Routes, Parameter, Request- und Response-Schemas sowie die aktuellen Statuscodes.
Ressourcenhandbücher
Ressourcenleitfäden erklären, wie verwandte Vorgänge sicher kombiniert werden können. Sie umfassen Arbeitsabläufe, Beispiele, Sicherheitsüberlegungen und bemerkenswerte Nebenwirkungen, ohne den vollständigen OpenAPI-Vertrag zu duplizieren.
Tenant-Struktur
Konfiguration
Benutzer und Zugriff
Operationen
Terminologie und Endpoint-Struktur
Control API Benennung:
- Eine Umgebung heißt
track- Eine Anwendungsregistrierung heißt
downparty- Eine Authentifizierungsmethode heißt
upparty
Die Control API URL enthält Variablen für den Tenant Namen und den Track Namen (Umgebungsname), den Sie bearbeiten möchten: .../{tenant_name}/{track_name}/....
Ersetzen Sie {tenant_name} durch Ihren Tenant Namen und {track_name} durch den technischen Umgebungsnamen. Wenn Sie einen Proxy aus dem Swagger (OpenAPI) Dokument generieren, werden diese Variablen als Eingabeparameter bereitgestellt.
Zum Beispiel, um eine OpenID Connect Anwendungsregistrierung in FoxIDs Cloud mit dem technischen Namen some_oidc_app zu lesen, rufen Sie (HTTP GET) https://control.foxids.com/api/{tenant_name}/{track_name}/!oidcdownparty?name=some_oidc_app auf (ersetzen Sie die Variablen mit Ihrem Tenant Namen und technischen Umgebungsnamen).
Authentifizierung
Sie können Control API entweder als Service Daemon mit einem OAuth 2.0 Client (Client Credentials) oder im Kontext eines Benutzers über einen OpenID Connect Client aufrufen.
Die folgenden Schritte erstellen einen OAuth 2.0 Client und gewähren ihm Admin Level Access Rights über Scopes und Rollen.
OAuth 2.0 Client im FoxIDs Control Client erstellen:
- master Umgebung auswählen (im Header).
- Tab Applications auswählen.
- New Application klicken.
- Backend Application klicken.
- Name hinzufügen z. B.
My API Client. - Register klicken.
- Client ID und Client secret kopieren.
- Close klicken.
- Name hinzufügen z. B.
- Ihre Client Registrierung in der Liste anklicken, um sie zu öffnen.
- Im Abschnitt Resource and scopes - gewährt dem Client Zugriff auf Ihren Tenant:
- Add Resource and scope klicken und die Resource
foxids_control_apihinzufügen. - Add Scope klicken und das Scope
foxids:tenanthinzufügen.
- Add Resource and scope klicken und die Resource
- Show advanced auswählen.
- Im Abschnitt Issue claims - gewährt dem Client die Tenant Administrator Rolle:
- Add Claim klicken und Claim
rolehinzufügen. - Add Value klicken und Claim Wert
foxids:tenant.adminhinzufügen.
- Add Claim klicken und Claim
- Update klicken.
Führen Sie anschließend eine OAuth 2.0 Client Credentials Grant Anfrage durch, um ein Access Token für Control API zu erhalten.
Ersetzen Sie {tenant_name}, {track_name}, {client_id} und {client_secret}. Ändern Sie die Domain, wenn Sie self hosten.
Postman sample
Diese Postman Collection authentifiziert sich mit dem OAuth 2.0 Client My API Client und gibt die Benutzer für die konfigurierte Umgebung (track) zurück.
Erstellen Sie eine Postman Collection JSON Datei, z. B. foxids_control_api.postman_collection.json, mit dem folgenden Inhalt. Ersetzen Sie {tenant_name}, {track_name}, {client_id} und {client_secret}. Ändern Sie die Domains (foxids.com und control.foxids.com), wenn Sie self hosten.
{
"info": {
"name": "FoxIDs API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET users",
"request": {
"auth": {
"type": "oauth2",
"oauth2": [
{
"key": "accessTokenUrl",
"value": "https://foxids.com/{tenant_name}/master/{client_id}/(*)/oauth/token",
"type": "string"
},
{
"key": "clientSecret",
"value": "{client_secret}",
"type": "string"
},
{
"key": "clientId",
"value": "{client_id}",
"type": "string"
},
{
"key": "tokenName",
"value": "api_access_token",
"type": "string"
},
{
"key": "client_authentication",
"value": "body",
"type": "string"
},
{
"key": "scope",
"value": "foxids_control_api:foxids:tenant",
"type": "string"
},
{
"key": "grant_type",
"value": "client_credentials",
"type": "string"
},
{
"key": "addTokenTo",
"value": "header",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"protocol": "https",
"host": [
"control.foxids.com"
],
"port": "443",
"path": [
"api",
"{tenant_name}",
"{track_name}",
"!users"
]
}
}
}
]
}
HTTP request sample
Dieses HTTP Sample authentifiziert sich als OAuth 2.0 Client My API Client mit dem Client Credentials Grant.
POST https://foxids.com/{tenant_name}/master/{client_id}(*)/oauth/token HTTP/1.1
Host: foxids.com
Content-Type: application/x-www-form-urlencoded
client_id={client_id}
&client_secret={client_secret}
&grant_type=client_credentials
&scope=foxids_control_api%3Afoxids%3Atenant
Token JSON response:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store
{
"access_token":"eyJhGfjlc...nNjH3iIWvMdCM",
"token_type":"Bearer",
"expires_in":3600
}
Das access_token wird verwendet, um Control API aufzurufen.
C# code sample
Dieses C# Sample authentifiziert sich als OAuth 2.0 Client My API Client mit dem Client Credentials Grant.
// NuGet package: ITfoxtec.Identity
using ITfoxtec.Identity.Helpers;
var oidcDiscoveryUrl = "https://foxids.com/{tenant_name}/master/{client_id}(*)/.well-known/openid-configuration";
// Inject IHttpClientFactory httpClientFactory
var oidcDiscovery = new OidcDiscoveryHandler(httpClientFactory, oidcDiscoveryUrl);
// Inject IHttpClientFactory httpClientFactory
var tokenHelper = new TokenHelper(httpClientFactory, oidcDiscovery);
var clientId = "{client_id}";
var clientSecret = "{client_secret}";
var scope = "foxids_control_api:foxids:tenant";
(var accessToken, var expiresIn) = await tokenHelper.GetAccessTokenWithClientCredentialGrantAsync(clientId, clientSecret, scope);
Rufen Sie anschließend Control API mit dem Access Token als Authorization Bearer Header auf, wie in OAuth 2.0 Bearer Token (RFC 6750) definiert.
C# code sample
Dieses C# Sample zeigt, wie das Access Token zum HttpClient hinzugefügt wird und die OpenID Connect Anwendungsregistrierung some_oidc_app (technischer Name) gelesen wird.
// NuGet package: ITfoxtec.Identity
using ITfoxtec.Identity;
// Inject IHttpClientFactory httpClientFactory
var httpClient = httpClientFactory.CreateClient();
// Add the access token
httpClient.SetAuthorizationHeaderBearer(accessToken);
// Call Control API using the httpClient
// E.g. read a OpenID Connect application registration
using var response = await httpClient.GetAsync("https://control.foxids.com/api/{tenant_name}/{track_name}/!oidcdownparty?name=some_oidc_app");
API access rights
Dies zeigt die Control API Konfiguration in einer Tenant Master Umgebung mit dem default Satz an Scopes, die Zugriff auf Tenant Daten gewähren.

Sie können weitere Scopes hinzufügen, um Control API Zugriffsrechte pro Umgebung zu erweitern und Least Privilege Konfigurationen zu erreichen.
Der Zugriff auf Control API ist durch Scopes und Rollen eingeschränkt. Es gibt zwei Scope Familien: foxids:master gewährt Zugriff auf Master Tenant Daten und foxids:tenant gewährt Zugriff auf Tenant Daten.
Die Control API Resource foxids_control_api ist in jeder Tenant Master Umgebung definiert, und die konfigurierten Scopes gewähren Zugriff auf die Tenant Daten über Control API.
Der Zugriff eines Scopes kann durch Hinzufügen weiterer Elemente getrennt mit Semikolons und Punkten eingeschränkt werden. Punkt Notation begrenzt auf eine spezifische Sub Rolle und wird sowohl in Scopes als auch Rollen verwendet. Aufrufer müssen einen oder mehrere passende Scopes und Rollen präsentieren.
Jedes Zugriffsrecht ist sowohl als Scope als auch als Rolle definiert. Dadurch können Sie Zugriff auf Client und Benutzer Ebene gewähren oder einschränken. Zugriffsrechte sind hierarchisch, und Client und Benutzer benötigen keine passenden Scopes und Rollen.
Die Administrator Rolle foxids:tenant.admin gewährt Zugriff auf alle Daten in einem Tenant und die Master Tenant Daten; sie entspricht den Rollen foxids:tenant und foxids:master.
Ein Client fordert ein Scope an, indem er Resource und Scope durch ein Semikolon trennt. Zum Beispiel fordert der Client für das Scope foxids:tenant:track:party.create den Wert foxids_control_api:foxids:tenant:track:party.create an.
Wenn eine Anfrage wegen unzureichender Zugriffsrechte abgelehnt wird, wird ein Trace Item mit den möglichen autorisierenden Scopes und Rollen sowie den tatsächlichen Scopes und Rollen des Benutzers protokolliert.
Tenant access rights
Tenant Zugriffsrechte sind sowohl Scopes als auch Rollen.
Wenn das benötigte Scope auf der Control API
foxids_control_apinicht definiert ist, können Sie es hinzufügen.
:track[xxxx] gibt eine Umgebung anhand des technischen Namens an. z. B. eine Test Umgebung mit dem technischen Namen hsgm7je5 ist :track[hsgm7je5]
und eine Production Umgebung mit dem technischen Namen - ist :track[-].
| Scope / role | Access |
|---|---|
| Zugriff auf alles im Tenant, nicht die Master Tenant Daten. | |
foxids:tenant |
read, create, update, delete |
foxids:tenant.read |
read |
foxids:tenant.create |
create |
foxids:tenant.update |
update |
foxids:tenant.delete |
delete |
| Zugriff auf grundlegende Tenant Elemente:
|
|
foxids:tenant:basic |
read, create, update, delete |
foxids:tenant:basic.read |
read |
foxids:tenant:basic.create |
create |
foxids:tenant:basic.update |
update |
foxids:tenant:basic.delete |
delete |
| Zugriff auf alles in allen Umgebungen eines Tenants, nicht inklusive der Master Umgebung. | |
foxids:tenant:track |
read, create, update, delete |
foxids:tenant:track.read |
read |
foxids:tenant:track.create |
create |
foxids:tenant:track.update |
update |
foxids:tenant:track.delete |
delete |
| Zugriff auf alles in einer bestimmten Umgebung eines Tenants. `xxxx` ist der technische Umgebungsname. | |
foxids:tenant:track[xxxx] |
read, create, update, delete |
foxids:tenant:track[xxxx].read |
read |
foxids:tenant:track[xxxx].create |
create |
foxids:tenant:track[xxxx].update |
update |
foxids:tenant:track[xxxx].delete |
delete |
| Alle Usage Logs in allen Umgebungen eines Tenants, nicht inklusive der Master Umgebung. Nicht anwendbar im Master Tenant. | |
foxids:tenant:track:usage |
read |
| Usage Logs in einer bestimmten Umgebung eines Tenants. Nicht anwendbar im Master Tenant. | |
foxids:tenant:track[xxxx]:usage |
read |
| Alle Audit Logs in allen Umgebungen eines Tenants, nicht inklusive der Master Umgebung. | |
foxids:tenant:track:audit |
read |
| Audit Logs in einer bestimmten Umgebung eines Tenants. | |
foxids:tenant:track[xxxx]:audit |
read |
| Alle Logs in allen Umgebungen eines Tenants, nicht inklusive der Master Umgebung. | |
foxids:tenant:track:log |
read, create, update, delete |
foxids:tenant:track:log.read |
read |
foxids:tenant:track:log.create |
create |
foxids:tenant:track:log.update |
update |
foxids:tenant:track:log.delete |
delete |
| Logs in einer bestimmten Umgebung. | |
foxids:tenant:track[xxxx]:log |
read, create, update, delete |
foxids:tenant:track[xxxx]:log.read |
read |
foxids:tenant:track[xxxx]:log.create |
create |
foxids:tenant:track[xxxx]:log.update |
update |
foxids:tenant:track[xxxx]:log.delete |
delete |
| Alle Benutzer und Mitgliedschaften in Zugriffsstrukturen in allen Umgebungen eines Tenants, nicht inklusive der Master Umgebung. | |
foxids:tenant:track:user |
read, create, update, delete |
foxids:tenant:track:user.read |
read |
foxids:tenant:track:user.create |
create |
foxids:tenant:track:user.update |
update |
foxids:tenant:track:user.delete |
delete |
| Alle Benutzer und Mitgliedschaften in Zugriffsstrukturen in einer bestimmten Umgebung eines Tenants. | |
foxids:tenant:track[xxxx]:user |
read, create, update, delete |
foxids:tenant:track[xxxx]:user.read |
read |
foxids:tenant:track[xxxx]:user.create |
create |
foxids:tenant:track[xxxx]:user.update |
update |
foxids:tenant:track[xxxx]:user.delete |
delete |
| Alle Zugriffsstrukturen und Mitgliedschaften in Zugriffsstrukturen in allen Umgebungen eines Tenants, nicht inklusive der Master Umgebung. | |
foxids:tenant:track:accessstructure |
read, create, update, delete |
foxids:tenant:track:accessstructure.read |
read |
foxids:tenant:track:accessstructure.create |
create |
foxids:tenant:track:accessstructure.update |
update |
foxids:tenant:track:accessstructure.delete |
delete |
| Alle Zugriffsstrukturen und Mitgliedschaften in Zugriffsstrukturen in einer bestimmten Umgebung eines Tenants. | |
foxids:tenant:track[xxxx]:accessstructure |
read, create, update, delete |
foxids:tenant:track[xxxx]:accessstructure.read |
read |
foxids:tenant:track[xxxx]:accessstructure.create |
create |
foxids:tenant:track[xxxx]:accessstructure.update |
update |
foxids:tenant:track[xxxx]:accessstructure.delete |
delete |
| Alle Anwendungsregistrierungen und Authentifizierungsmethoden in allen Umgebungen eines Tenants, nicht inklusive der Master Umgebung. | |
foxids:tenant:track:party |
read, create, update, delete |
foxids:tenant:track:party.read |
read |
foxids:tenant:track:party.create |
create |
foxids:tenant:track:party.update |
update |
foxids:tenant:track:party.delete |
delete |
| Alle Anwendungsregistrierungen und Authentifizierungsmethoden in einer bestimmten Umgebung eines Tenants. | |
foxids:tenant:track[xxxx]:party |
read, create, update, delete |
foxids:tenant:track[xxxx]:party.read |
read |
foxids:tenant:track[xxxx]:party.create |
create |
foxids:tenant:track[xxxx]:party.update |
update |
foxids:tenant:track[xxxx]:party.delete |
delete |
Master tenant access rights
Master Tenant Zugriffsrechte sind sowohl Scopes als auch Rollen.
| Scope / role | Access |
|---|---|
| Zugriff auf Master Tenant Daten Kann Tenants auflisten, erstellen und löschen, aber nicht in andere Tenants hineinsehen. |
|
foxids:master |
read, create, update, delete |
foxids:master.read |
read |
foxids:master.create |
create |
foxids:master.update |
update |
foxids:master.delete |
delete |
| Audit Log im Master Tenant. | |
foxids:master:audit |
read |
| Usage Log im Master Tenant. | |
foxids:master:usage |
read |