FoxIDs Control
FoxIDs wordt geconfigureerd via FoxIDs Control, dat bestaat uit Control Client en Control API. Control Client en API zijn beveiligd door FoxIDs en Control Client gebruikt Control API.
Control API bevat alle configuratie functionaliteit. Daarom is het mogelijk om de configuratie te automatiseren door te integreren met Control API.
FoxIDs Control Client
Control Client is een Blazor WebAssembly (WASM) app.
Open je Control Client op FoxIDs.com.
Tenant en master omgeving
Als je FoxIDs.com gebruikt, wordt je tenant aangemaakt tijdens registratie.
Als je FoxIDs deploy (self hosted), krijg je toegang tot de master tenant. Maak eerst een tenant die je beveiligingsconfiguratie bevat. De meeste installaties hebben er maar één nodig, maar je kunt een onbeperkt aantal tenants configureren.

Een tenant bevat een master omgeving, van waaruit de hele tenant wordt geconfigureerd. De master omgeving bevat een gebruikersrepository en bij aanmaken slechts één administrator gebruiker.
Normaal gesproken moet je de master omgeving configuratie niet wijzigen of nieuwe authenticatiemethoden of app registraties toevoegen, maar het is mogelijk. Je kunt bijvoorbeeld door een authenticatiemethode toe te voegen single sign on (SSO) krijgen voor de master omgeving.
Administrator gebruiker(s) aanmaken
Het is mogelijk om meer administrator gebruikers in de master omgeving aan te maken. Een gebruiker wordt administrator door de administrator rol foxids:tenant.admin toe te voegen zoals hieronder getoond.
Maak een gebruiker aan:
- Open de master omgeving
- Selecteer de Users tab
- Klik Create User
- Voeg gebruikersinformatie toe en klik Create.

Toegang aan gebruiker verlenen
Toegang wordt verleend met rollen. Scopes zijn alleen nodig wanneer een client een token voor Control API aanvraagt; Control Client vraagt al het vereiste scope aan op foxids_control_api, dus je wijst doorgaans alleen rollen toe aan de gebruiker in de master omgeving.
Om iemand te laten inloggen in Control Client en configuratie data te zien:
- Maak of open de gebruiker in de
masteromgeving (Users tab). - Voeg de basisrol
foxids:tenant:basic.readtoe (vereist zodat Control Client profiel en hulpprogramma's kan laden). - Bepaal wat de gebruiker mag zien:
- Om zichtbaarheid te beperken tot één omgeving, voeg
foxids:tenant:track[vh2csjt4].readtoe (vervangvh2csjt4met de technische omgeving naam). - Om alle omgevingen toe te staan, voeg
foxids:tenant.readtoe.
- Om zichtbaarheid te beperken tot één omgeving, voeg
- Voeg de operationele rollen toe die de gebruiker in elke omgeving nodig heeft. Voorbeelden:
foxids:tenant:track[vh2csjt4]:userom gebruikers te beheren,foxids:tenant:track[vh2csjt4]:partyom applicaties en authenticatiemethoden te beheren.
Control Client vs API only:
- Control Client (interactieve UI) leest profieldata en omgevingslijsten naast de specifieke API die je wilt beheren. Het heeft daarom
foxids:tenant:basic.readplus een omgevings read rol (foxids:tenant:track[main].readoffoxids:tenant.read) nodig naast je action rollen. - API only callers kunnen smaller zijn. Als een backend service alleen de user API voor de omgeving
vh2csjt4aanroept, is de rolfoxids:tenant:track[vh2csjt4]:user(en het bijbehorende scope aanvragen bij client credentials) voldoende; de extra read rollen zijn niet nodig omdat geen UI data geladen hoeft te worden.
Omgevingen
Configureer een aantal omgevingen, één voor elk van je omgevingen zoals dev, qa en prod.
Maak één of meer omgevingen aan, plaats geen configuratie in de master omgeving.

Elke omgeving bevat een gebruikersrepository en een standaard login authenticatiemethode.
Je kunt OpenID Connect, OAuth 2.0 en SAML 2.0 app registraties en authenticatiemethoden toevoegen.

Een omgeving bevat een primair certificaat en mogelijk een secundair certificaat in de Certificates tab. Het is mogelijk om tussen het primaire en secundaire certificaat te wisselen als beide zijn geconfigureerd, afhankelijk van het certificaat container type.

De omgevingsinstellingen kunnen worden geconfigureerd door op het settings icoon rechtsboven te klikken.
- Sequence lifetime is de maximale levensduur van een login flow van start tot eind.
- FoxIDs beschermt tegen password guessing via max failing logins, failing login count lifetime en observation period.
- Wachtwoordvereisten worden geconfigureerd voor lengte, complexiteit en password risk.
- Het is mogelijk om FoxIDs te hosten in een iframe vanaf toegestane domeinen.
- Je kunt emails verzenden met je eigen SendGrid tenant door een custom email adres en SendGrid sleutel toe te voegen.

FoxIDs Control API
Control API is een REST API met een online Swagger (OpenAPI) interface beschrijving en Swagger UI.
Als je FoxIDs self host, wordt het Swagger (OpenAPI) document getoond in FoxIDs Control op .../api/swagger/v2/swagger.json en de Swagger UI op .../api/swagger.
Control API naming:
- Een omgeving heet een
track- Een app registratie heet een
downparty- Een authenticatiemethode heet een
upparty
De Control API URL bevat variabelen voor de tenant naam en track naam (omgeving naam) die je wilt beheren: .../{tenant_name}/{track_name}/....
Vervang {tenant_name} met je tenant naam en {track_name} met de technische omgeving naam. Als je een proxy genereert vanuit het Swagger (OpenAPI) document, worden die variabelen als input parameters aangeboden.
Bijvoorbeeld om een OpenID Connect app registratie te lezen in FoxIDs Cloud met de technische naam some_oidc_app, roep (HTTP GET) https://control.foxids.com/api/{tenant_name}/{track_name}/!oidcdownparty?name=some_oidc_app aan (vervang de variabelen met je tenant naam en technische omgeving naam).
Je kunt Control API aanroepen als service daemon met een OAuth 2.0 client (client credentials) of in de context van een gebruiker via een OpenID Connect client.
De stappen hieronder maken een OAuth 2.0 client aan en verlenen admin level access rights via scopes en rollen.
Maak een OAuth 2.0 client in FoxIDs Control Client:
- Selecteer de master omgeving (in de header).
- Selecteer de Applications tab.
- Klik New Application.
- Klik Backend Application.
- Voeg een Name toe, bijvoorbeeld
My API Client. - Klik Register.
- Kopieer Client ID en Client secret.
- Klik Close.
- Voeg een Name toe, bijvoorbeeld
- Klik je client registratie in de lijst om deze te openen.
- In de Resource and scopes sectie - geeft de client toegang tot je tenant:
- Klik Add Resource and scope en voeg de resource
foxids_control_apitoe. - Klik Add Scope en voeg het scope
foxids:tenanttoe.
- Klik Add Resource and scope en voeg de resource
- Selecteer Show advanced.
- In de Issue claims sectie - geeft de client de tenant administrator rol:
- Klik Add Claim en voeg de claim
roletoe. - Klik Add Value en voeg de claim waarde
foxids:tenant.admintoe.
- Klik Add Claim en voeg de claim
- Klik Update.
Voer daarna een OAuth 2.0 Client Credentials Grant request uit om een access token voor Control API te verkrijgen.
Vervang {tenant_name}, {track_name}, {client_id} en {client_secret}. Wijzig het domein als je self host.
Postman sample
Deze Postman collection authenticeert met de OAuth 2.0 client My API Client en retourneert de gebruikers voor de geconfigureerde omgeving (track).
Maak een Postman collection JSON bestand, bijvoorbeeld foxids_control_api.postman_collection.json, met de onderstaande inhoud. Vervang {tenant_name}, {track_name}, {client_id} en {client_secret}. Wijzig de domeinen (foxids.com en control.foxids.com) als je self host.
{
"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
Deze HTTP sample authenticeert als de OAuth 2.0 client My API Client met de 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
}
Het access_token wordt gebruikt om Control API aan te roepen.
C# code sample
Deze C# sample authenticeert als de OAuth 2.0 client My API Client met de 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);
Roep daarna Control API aan met het access token als Authorization Bearer header, zoals gedefinieerd in OAuth 2.0 Bearer Token (RFC 6750).
C# code sample
Deze C# sample laat zien hoe je het access token toevoegt aan de HttpClient en de OpenID Connect app registratie some_oidc_app (technische naam) leest.
// 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
Dit toont de Control API configuratie in een tenant master omgeving met de default set scopes die toegang geven tot tenant data.

Je kunt extra scopes toevoegen om Control API toegang per omgeving uit te breiden voor least privilege configuraties.
Toegang tot Control API wordt beperkt door scopes en rollen. Er zijn twee scope families: foxids:master geeft toegang tot master tenant data en foxids:tenant geeft toegang tot tenant data.
De Control API resource foxids_control_api is gedefinieerd in elke tenant master omgeving, en de geconfigureerde scopes geven toegang tot de tenant data via Control API.
De toegang van een scope kan worden beperkt door extra elementen toe te voegen, gescheiden door puntkomma's en punten. Punt notatie beperkt tot een specifieke sub rol en wordt gebruikt in zowel scopes als rollen. Callers moeten één of meerdere passende scope(s) en rol(len) presenteren.
Elke toegangsrecht is zowel een scope als een rol. Dit maakt het mogelijk om toegang op client en gebruiker niveau te verlenen of te beperken. Toegangsrechten zijn hiërarchisch, en client en gebruiker hoeven geen overeenkomende scopes en rollen te hebben.
De administrator rol foxids:tenant.admin geeft toegang tot alle data in een tenant en de master tenant data; het is gelijk aan de rollen foxids:tenant en foxids:master.
Een client vraagt een scope aan door resource en scope te scheiden met een puntkomma. Bijvoorbeeld, om het scope foxids:tenant:track:party.create aan te vragen, vraagt de client foxids_control_api:foxids:tenant:track:party.create aan.
Als een request wordt geweigerd vanwege onvoldoende toegang, wordt een trace item gelogd met de mogelijke authoriserende scopes en rollen samen met de scopes en rollen van de gebruiker.
Tenant access rights
Tenant access rights zijn zowel scopes als rollen.
Als het scope dat je nodig hebt niet is gedefinieerd op Control API
foxids_control_api, kun je het scope toevoegen.
:track[xxxx] specificeert een omgeving via de technische naam. Bijvoorbeeld een Test omgeving met technische naam hsgm7je5 is :track[hsgm7je5]
en een Production omgeving met technische naam - is :track[-].
| Scope / role | Access |
|---|---|
| Toegang tot alles in de tenant, niet tot master tenant data. | |
foxids:tenant |
read, create, update, delete |
foxids:tenant.read |
read |
foxids:tenant.create |
create |
foxids:tenant.update |
update |
foxids:tenant.delete |
delete |
| Toegang tot basis tenant elementen:
|
|
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 |
| Toegang tot alles in alle omgevingen binnen een tenant, niet inclusief de master omgeving. | |
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 |
| Toegang tot alles in een specifieke omgeving binnen een tenant. `xxxx` is de technische omgeving naam. | |
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 alle omgevingen binnen een tenant, niet inclusief de master omgeving. Niet van toepassing in de master tenant. | |
foxids:tenant:track:usage |
read |
| Usage logs in een specifieke omgeving binnen een tenant. Niet van toepassing in de master tenant. | |
foxids:tenant:track[xxxx]:usage |
read |
| Alle audit logs in alle omgevingen binnen een tenant, niet inclusief de master omgeving. | |
foxids:tenant:track:audit |
read |
| Audit logs in een specifieke omgeving binnen een tenant. | |
foxids:tenant:track[xxxx]:audit |
read |
| Alle logs in alle omgevingen binnen een tenant, niet inclusief de master omgeving. | |
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 een specifieke omgeving. | |
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 gebruikers in alle omgevingen binnen een tenant, niet inclusief de master omgeving. | |
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 gebruikers in een specifieke omgeving binnen een tenant. | |
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 app registraties en authenticatiemethoden in alle omgevingen binnen een tenant, niet inclusief de master omgeving. | |
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 app registraties en authenticatiemethoden in een specifieke omgeving binnen een tenant. | |
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 access rights zijn zowel scopes als rollen.
| Scope / role | Access |
|---|---|
| Toegang tot master tenant data Kan tenants opsommen, aanmaken en verwijderen maar niet in andere tenants kijken. |
|
foxids:master |
read, create, update, delete |
foxids:master.read |
read |
foxids:master.create |
create |
foxids:master.update |
update |
foxids:master.delete |
delete |
| Audit log in de master tenant. | |
foxids:master:audit |
read |
| Usage log in de master tenant. | |
foxids:master:usage |
read |