FoxIDs Control
FoxIDs konfigureres via FoxIDs Control som består af Control Client og Control API. Control Client og API er sikret af FoxIDs, og Control Client bruger Control API.
Control API indeholder al konfigurationsfunktionalitet. Derfor er det muligt at automatisere konfigurationen ved at integrere med Control API.
FoxIDs Control Client
Control Client er en Blazor WebAssembly (WASM) app.
Åbn din Control Client på FoxIDs.com.
Tenant og master miljø
Hvis du bruger FoxIDs.com, oprettes din tenant under registrering.
Hvis du deploy FoxIDs (self hosted) får du adgang til master tenant. Opret først en tenant til at indeholde din sikkerhedskonfiguration. De fleste installationer behøver kun én, men du kan konfigurere et ubegrænset antal tenants.

En tenant indeholder et master miljø, hvorfra hele tenant konfigureres. Master miljøet indeholder et bruger repository og ved oprettelse kun én administratorbruger.
Normalt bør du ikke ændre master miljøets konfiguration eller tilføje nye autentificeringsmetoder eller applikationsregistreringer, men det er muligt. Du kan f.eks. ved at tilføje en autentificeringsmetode opnå single sign on (SSO) til master miljøet.
Opret administrator bruger(e)
Det er muligt at oprette flere administratorbrugere i master miljøet. En bruger bliver administrator ved at tilføje administratorrollen foxids:tenant.admin som vist nedenfor.
Opret en bruger:
- Åbn master miljøet
- Vælg fanen Users
- Klik Create User
- Tilføj brugeroplysninger og klik Create.

Tildel adgang til bruger
Adgang tildeles via roller. Scopes er kun nødvendige når en klient anmoder om en token til Control API; Control Client anmoder allerede om det krævede scope på foxids_control_api, så du tildeler typisk kun roller til brugeren i master miljøet.
For at lade en person logge ind i Control Client og se konfigurationsdata:
- Opret eller åbn brugeren i
mastermiljøet (Users fanen). - Tilføj basisrollen
foxids:tenant:basic.read(kræves for at Control Client kan indlæse profil og værktøjer). - Vælg hvad brugeren må se:
- For at begrænse synligheden til ét miljø, tilføj
foxids:tenant:track[vh2csjt4].read(erstatvh2csjt4med det tekniske miljønavn). - For at tillade alle miljøer, tilføj
foxids:tenant.read.
- For at begrænse synligheden til ét miljø, tilføj
- Tilføj de operationelle roller brugeren har brug for i hvert miljø. Eksempler:
foxids:tenant:track[vh2csjt4]:usertil at administrere brugere,foxids:tenant:track[vh2csjt4]:partytil at administrere applikationer og autentificeringsmetoder.
Control Client vs API only:
- Control Client (interaktiv UI) læser profildata og miljølister ud over de specifikke API'er, du vil administrere. Den kræver derfor
foxids:tenant:basic.readplus en miljølæse rolle (foxids:tenant:track[main].readellerfoxids:tenant.read) sammen med dine action roller. - API only kaldere kan være mere snævre. Hvis en backend service kun kalder user API'et for miljøet
vh2csjt4, er rollenfoxids:tenant:track[vh2csjt4]:user(og anmodning om det matchende scope ved client credentials) tilstrækkelig; de ekstra read roller er ikke nødvendige fordi ingen UI data skal indlæses.
Miljøer
Konfigurer et antal miljøer, ét for hvert af dine miljøer f.eks. dev, qa og prod.
Opret et eller flere miljøer, læg ikke konfiguration i master miljøet.

Hvert miljø indeholder et bruger repository og en standard login autentificeringsmetode.
Du kan tilføje OpenID Connect, OAuth 2.0 og SAML 2.0 applikationsregistreringer og autentificeringsmetoder.

Et miljø indeholder et primært certifikat og muligvis et sekundært certifikat i Certificates fanen. Det er muligt at skifte mellem primært og sekundært certifikat hvis begge er konfigureret, afhængigt af certifikat container typen.

Miljøets egenskaber kan konfigureres ved at klikke på settings ikonet øverst til højre.
- Sequence lifetime er max levetid for en brugers login flow fra start til slut.
- FoxIDs beskytter mod password gætning via max failing logins, failing login count lifetime og observation period.
- Password krav konfigureres vedrørende længde, kompleksitet og password risk.
- Det er muligt at hoste FoxIDs i en iframe fra tilladte domæner.
- Du kan sende emails med din egen SendGrid tenant ved at tilføje en custom email adresse og SendGrid nøgle.

FoxIDs Control API
Control API er en REST API med en online Swagger (OpenAPI) interface beskrivelse og Swagger UI.
Hvis du self hoster FoxIDs, er Swagger (OpenAPI) dokumentet eksponeret i FoxIDs Control på .../api/swagger/v2/swagger.json og Swagger UI på .../api/swagger.
Control API navngivning:
- Et miljø kaldes en
track- En applikationsregistrering kaldes en
downparty- En autentificeringsmetode kaldes en
upparty
Control API URL'en indeholder variabler for tenant navn og track navn (miljønavn) du vil arbejde på: .../{tenant_name}/{track_name}/....
Erstat {tenant_name} med dit tenant navn og {track_name} med miljøets tekniske navn. Hvis du genererer en proxy fra Swagger (OpenAPI) dokumentet, leveres variablerne som input parametre.
For eksempel, for at læse en OpenID Connect applikationsregistrering i FoxIDs Cloud med det tekniske navn some_oidc_app, kald (HTTP GET) https://control.foxids.com/api/{tenant_name}/{track_name}/!oidcdownparty?name=some_oidc_app (erstat variablerne med dit tenant navn og miljøets tekniske navn).
Du kan kalde Control API enten som en service daemon med en OAuth 2.0 client (client credentials) eller i konteksten af en bruger via en OpenID Connect client.
Trinene nedenfor opretter en OAuth 2.0 client og tildeler den admin niveau access rights via scopes og roller.
Opret en OAuth 2.0 client i FoxIDs Control Client:
- Vælg master miljøet (i headeren).
- Vælg fanen Applications.
- Klik New Application.
- Klik Backend Application.
- Tilføj et Name f.eks.
My API Client. - Klik Register.
- Kopiér Client ID og Client secret.
- Klik Close.
- Tilføj et Name f.eks.
- Klik din client registrering i listen for at åbne den.
- I sektionen Resource and scopes - tildeler client adgang til din tenant:
- Klik Add Resource and scope og tilføj resourcen
foxids_control_api. - Klik Add Scope og tilføj scopet
foxids:tenant.
- Klik Add Resource and scope og tilføj resourcen
- Vælg Show advanced.
- I sektionen Issue claims - tildeler clienten tenant administrator rollen:
- Klik Add Claim og tilføj claim
role. - Klik Add Value og tilføj claim værdi
foxids:tenant.admin.
- Klik Add Claim og tilføj claim
- Klik Update.
Udfør derefter en OAuth 2.0 Client Credentials Grant request for at få en access token til Control API.
Erstat {tenant_name}, {track_name}, {client_id} og {client_secret}. Skift domænet hvis du self hoster.
Postman sample
Denne Postman collection autentificerer med OAuth 2.0 clienten My API Client og returnerer brugerne for det konfigurerede miljø (track).
Opret en Postman collection JSON fil, f.eks. foxids_control_api.postman_collection.json, med indholdet nedenfor. Erstat {tenant_name}, {track_name}, {client_id} og {client_secret}. Skift domænerne (foxids.com og control.foxids.com) hvis du self hoster.
{
"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
Denne HTTP sample autentificerer som OAuth 2.0 clienten My API Client med 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
}
access_token bruges til at kalde Control API.
C# code sample
Denne C# sample autentificerer som OAuth 2.0 clienten My API Client med 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);
Kald derefter Control API med access token som Authorization Bearer header, som defineret i OAuth 2.0 Bearer Token (RFC 6750) standarden.
C# code sample
Denne C# sample viser hvordan access token tilføjes til HttpClient og læser OpenID Connect applikationsregistreringen some_oidc_app (teknisk navn).
// 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
Dette viser Control API konfigurationen i en tenants master miljø med det default sæt af scopes som giver adgang til tenant data.

Du kan tilføje flere scopes for at udvide Control API adgangsrettigheder pr. miljø for at opnå least privilege konfigurationer.
Adgang til Control API er begrænset af scopes og roller. Der er to scope familier: foxids:master giver adgang til master tenant data og foxids:tenant giver adgang til tenant data.
Control API resourcen foxids_control_api er defineret i hver tenants master miljø, og de konfigurerede scopes giver adgang til den tenants data via Control API.
Et scopes adgang kan indsnævres ved at tilføje flere elementer adskilt med semikolon og punktum. Punktum notation begrænser til en specifik sub rolle og bruges både i scopes og roller. Kaldere skal præsentere et eller flere matchende scope(s) og rolle(r).
Hver adgangsrettighed defineres både som et scope og en rolle. Det gør det muligt at tildele eller begrænse adgang på både client og bruger niveau. Adgangsrettigheder er hierarkiske, og client og bruger behøver ikke matchende scopes og roller.
Administrator rollen foxids:tenant.admin giver adgang til alle data i en tenant og master tenant data; den svarer til at have rollerne foxids:tenant og foxids:master.
En client anmoder om et scope ved at specificere resourcen og scopet adskilt af et semikolon. For eksempel, for at anmode om scopet foxids:tenant:track:party.create anmoder clienten om foxids_control_api:foxids:tenant:track:party.create.
Hvis en anmodning afvises på grund af utilstrækkelige adgangsrettigheder, logges et trace item med mulige autoriserende scopes og roller sammen med brugerens aktuelle scopes og roller.
Tenant access rights
Tenant adgangsrettigheder er både scopes og roller.
Hvis scopet du har brug for ikke er defineret på Control API
foxids_control_apikan du tilføje scopet.
:track[xxxx] specificerer et miljø ved det tekniske navn. f.eks. et Test miljø med det tekniske navn hsgm7je5 er :track[hsgm7je5]
og et Production miljø med det tekniske navn - er :track[-].
| Scope / role | Access |
|---|---|
| Adgang til alt i tenant, ikke 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 |
| Adgang til basale tenant elementer:
|
|
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 |
| Adgang til alt i alle miljøer i en tenant, ikke inklusiv master miljøet. | |
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 |
| Adgang til alt i et specifikt miljø i en tenant. `xxxx` er miljøets tekniske navn. | |
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 i alle miljøer i en tenant, ikke inklusiv master miljøet. Ikke relevant i master tenant. | |
foxids:tenant:track:usage |
read |
| Usage logs i et specifikt miljø i en tenant. Ikke relevant i master tenant. | |
foxids:tenant:track[xxxx]:usage |
read |
| Alle audit logs i alle miljøer i en tenant, ikke inklusiv master miljøet. | |
foxids:tenant:track:audit |
read |
| Audit logs i et specifikt miljø i en tenant. | |
foxids:tenant:track[xxxx]:audit |
read |
| Alle logs i alle miljøer i en tenant, ikke inklusiv master miljøet. | |
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 i et specifikt miljø. | |
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 brugere i alle miljøer i en tenant, ikke inklusiv master miljøet. | |
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 brugere i et specifikt miljø i en 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 applikationsregistreringer og autentificeringsmetoder i alle miljøer i en tenant, ikke inklusiv master miljøet. | |
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 applikationsregistreringer og autentificeringsmetoder i et specifikt miljø i en 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 adgangsrettigheder er både scopes og roller.
| Scope / role | Access |
|---|---|
| Adgang til master tenant data Kan liste, oprette og slette tenants men ikke kigge ind i andre tenants. |
|
foxids:master |
read, create, update, delete |
foxids:master.read |
read |
foxids:master.create |
create |
foxids:master.update |
update |
foxids:master.delete |
delete |
| Audit log i master tenant. | |
foxids:master:audit |
read |
| Usage log i master tenant. | |
foxids:master:usage |
read |