FoxIDs Control
FoxIDs wird über FoxIDs Control konfiguriert, das aus Control Client und Control API besteht. Control Client und API sind durch FoxIDs gesichert, und Control Client verwendet Control API.
Control API enthält die gesamte Konfigurationsfunktionalität. Daher ist es möglich, die Konfiguration durch Integration mit Control API zu automatisieren.
FoxIDs Control Client
Control Client ist eine Blazor WebAssembly (WASM) App.
Öffnen Sie Ihren Control Client auf FoxIDs.com.
Tenant und Master Umgebung
Wenn Sie FoxIDs.com verwenden, wird Ihr Tenant während der Registrierung erstellt.
Wenn Sie FoxIDs bereitstellen (self hosted), erhalten Sie Zugriff auf den Master Tenant. Erstellen Sie zuerst einen Tenant, der Ihre Sicherheitskonfiguration enthält. Die meisten Installationen benötigen nur einen, aber Sie können eine unbegrenzte Anzahl von Tenants konfigurieren.

Ein Tenant enthält eine Master Umgebung, von der der gesamte Tenant konfiguriert wird. Die Master Umgebung enthält ein Benutzer Repository und bei der Erstellung nur einen Administrator Benutzer.
Normalerweise sollten Sie die Master Umgebung Konfiguration nicht ändern oder neue Authentifizierungsmethoden oder Anwendungsregistrierungen hinzufügen, aber es ist möglich. Sie können z. B. durch Hinzufügen einer Authentifizierungsmethode Single Sign on (SSO) zur Master Umgebung erreichen.
Administrator Benutzer erstellen
Es ist möglich, weitere Administrator Benutzer in der master Umgebung zu erstellen. Ein Benutzer wird Administrator, indem die Administrator Rolle foxids:tenant.admin hinzugefügt wird, wie unten gezeigt.
Benutzer erstellen:
- Master Umgebung öffnen
- Tab Users auswählen
- Create User klicken
- Benutzerinformationen hinzufügen und Create klicken.

Zugriff für Benutzer gewähren
Zugriff wird über Rollen gewährt. Scopes sind nur erforderlich, wenn ein Client ein Token für Control API anfordert; Control Client fordert bereits das erforderliche Scope auf foxids_control_api an, daher weisen Sie in der Regel nur Rollen für den Benutzer in der Master Umgebung zu.
Damit sich eine Person im Control Client anmelden und Konfigurationsdaten sehen kann:
- Benutzer in der
masterUmgebung erstellen oder öffnen (Users Tab). - Basis Rolle
foxids:tenant:basic.readhinzufügen (erforderlich, damit Control Client Profil und Hilfstools laden kann). - Entscheiden, was der Benutzer sehen darf:
- Um die Sichtbarkeit auf eine Umgebung zu beschränken,
foxids:tenant:track[vh2csjt4].readhinzufügen (ersetzen Sievh2csjt4durch den technischen Umgebungsnamen). - Um alle Umgebungen zu erlauben,
foxids:tenant.readhinzufügen.
- Um die Sichtbarkeit auf eine Umgebung zu beschränken,
- Die benötigten Betriebsrollen für jede Umgebung hinzufügen. Beispiele:
foxids:tenant:track[vh2csjt4]:userzur Verwaltung von Benutzern,foxids:tenant:track[vh2csjt4]:partyzur Verwaltung von Anwendungen und Authentifizierungsmethoden.
Control Client vs API only:
- Control Client (interaktive UI) liest Profildaten und Umgebungslisten zusätzlich zu den spezifischen APIs, die Sie verwalten möchten. Daher benötigt es
foxids:tenant:basic.readplus eine Umgebungs Lese Rolle (foxids:tenant:track[main].readoderfoxids:tenant.read) zusammen mit Ihren Action Rollen. - API only Aufrufer können enger sein. Wenn ein Backend Dienst nur die User API für die Umgebung
vh2csjt4aufruft, reicht die Rollefoxids:tenant:track[vh2csjt4]:user(und Anforderung des passenden Scopes bei Client Credentials) aus; die zusätzlichen Read Rollen sind nicht erforderlich, da keine UI Daten geladen werden.
Umgebungen
Konfigurieren Sie mehrere Umgebungen, eine für jede Ihrer Umgebungen z. B. dev, qa und prod.
Erstellen Sie eine oder mehrere Umgebungen, legen Sie keine Konfiguration in der Master Umgebung ab.

Jede Umgebung enthält ein Benutzer Repository und eine Standard login Authentifizierungsmethode.
Sie können OpenID Connect, OAuth 2.0 und SAML 2.0 Anwendungsregistrierungen und Authentifizierungsmethoden hinzufügen.

Eine Umgebung enthält ein primäres Zertifikat und möglicherweise ein sekundäres Zertifikat im Certificates Tab. Es ist möglich, zwischen primärem und sekundärem Zertifikat zu wechseln, wenn beide konfiguriert sind, abhängig vom Zertifikat Container Typ.

Die Umgebungs Eigenschaften können über das Settings Symbol oben rechts konfiguriert werden.
- Sequence lifetime ist die maximale Lebensdauer eines Login Flows vom Start bis zum Ende.
- FoxIDs schützt vor Passwort Raten über max failing logins, failing login count lifetime und observation period.
- Passwort Anforderungen werden bezüglich Länge, Komplexität und password risk konfiguriert.
- Es ist möglich, FoxIDs in einem iframe aus erlaubten Domains zu hosten.
- Sie können Emails mit Ihrem eigenen SendGrid Tenant senden, indem Sie eine Custom Email Adresse und einen SendGrid Schlüssel hinzufügen.

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.
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).
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}/{track_name}/{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}/{track_name}/{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 client.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 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 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 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 |