FoxIDs Control
FoxIDs konfigureras via FoxIDs Control som består av Control Client och Control API. Control Client och API är skyddade av FoxIDs, och Control Client använder Control API.
Control API innehåller all konfigurationsfunktionalitet. Därför är det möjligt att automatisera konfigurationen genom att integrera med Control API.
FoxIDs Control Client
Control Client är en Blazor WebAssembly (WASM) app.
Öppna din Control Client på FoxIDs.com.
Tenant och master miljö
Om du använder FoxIDs.com skapas din tenant under registrering.
Om du deploy FoxIDs (self hosted) får du tillgång till master tenant. Skapa först en tenant som innehåller din säkerhetskonfiguration. De flesta installationer behöver bara en, men du kan konfigurera ett obegränsat antal tenants.

En tenant innehåller en master miljö där hela tenant konfigureras. Master miljön innehåller ett användar repository och vid skapande endast en administratör användare.
Normalt bör du inte ändra master miljö konfigurationen eller lägga till nya autentiseringsmetoder eller applikationsregistreringar, men det är möjligt. Du kan till exempel genom att lägga till en autentiseringsmetod få single sign on (SSO) till master miljön.
Skapa administratör användare
Det är möjligt att skapa fler administratör användare i master miljön. En användare blir administratör genom att lägga till administratör rollen foxids:tenant.admin som visas nedan.
Skapa en användare:
- Öppna master miljön
- Välj Users fliken
- Klicka Create User
- Lägg till användarinformation och klicka Create.

Ge åtkomst till användare
Åtkomst ges via roller. Scopes behövs bara när en client begär en token för Control API; Control Client begär redan det nödvändiga scopet på foxids_control_api, så du tilldelar vanligtvis bara roller till användaren i master miljön.
För att låta en person logga in i Control Client och se konfigurationsdata:
- Skapa eller öppna användaren i
mastermiljön (Users fliken). - Lägg till basrollen
foxids:tenant:basic.read(krävs för att Control Client ska kunna ladda profil och hjälptools). - Bestäm vad användaren får se:
- För att begränsa synlighet till en miljö, lägg till
foxids:tenant:track[vh2csjt4].read(ersättvh2csjt4med det tekniska miljö namnet). - För att tillåta alla miljöer, lägg till
foxids:tenant.read.
- För att begränsa synlighet till en miljö, lägg till
- Lägg till de operationella roller användaren behöver i varje miljö. Exempel:
foxids:tenant:track[vh2csjt4]:userför att hantera användare,foxids:tenant:track[vh2csjt4]:partyför att hantera applikationer och autentiseringsmetoder.
Control Client vs API only:
- Control Client (interaktiv UI) läser profildata och miljölistor utöver de specifika APIer du vill hantera. Den behöver därför
foxids:tenant:basic.readplus en miljö read roll (foxids:tenant:track[main].readellerfoxids:tenant.read) tillsammans med dina action roller. - API only callers kan vara smalare. Om en backend tjänst bara kallar user API för miljön
vh2csjt4, räcker rollenfoxids:tenant:track[vh2csjt4]:user(och att begära matchande scope vid client credentials); extra read roller behövs inte eftersom inga UI data behöver laddas.
Miljöer
Konfigurera ett antal miljöer, en för varje av dina miljöer t.ex. dev, qa och prod.
Skapa en eller flera miljöer, lägg inte konfiguration i master miljön.

Varje miljö innehåller ett användar repository och en standard login autentiseringsmetod.
Du kan lägga till OpenID Connect, OAuth 2.0 och SAML 2.0 applikationsregistreringar och autentiseringsmetoder.

En miljö innehåller ett primärt certifikat och eventuellt ett sekundärt certifikat i Certificates fliken. Det är möjligt att byta mellan primärt och sekundärt certifikat om båda är konfigurerade, beroende på certifikat container typen.

Miljöegenskaperna kan konfigureras genom att klicka på settings ikonen uppe till höger.
- Sequence lifetime är max livslängd för en användares login flow från start till slut.
- FoxIDs skyddar mot password gissning via max failing logins, failing login count lifetime och observation period.
- Password krav konfigureras gällande längd, komplexitet och password risk.
- Det är möjligt att hosta FoxIDs i en iframe från tillåtna domäner.
- Du kan skicka emails med din egen SendGrid tenant genom att lägga till en custom email adress och SendGrid nyckel.

FoxIDs Control API
Control API är en REST API med en online Swagger (OpenAPI) interface beskrivning och Swagger UI.
Om du self hostar FoxIDs, exponeras Swagger (OpenAPI) dokumentet i FoxIDs Control på .../api/swagger/v2/swagger.json och Swagger UI på .../api/swagger.
Control API namngivning:
- En miljö kallas
track- En applikationsregistrering kallas
downparty- En autentiseringsmetod kallas
upparty
Control API URLen innehåller variabler för tenant namn och track namn (miljö namn) du vill arbeta på: .../{tenant_name}/{track_name}/....
Ersätt {tenant_name} med ditt tenant namn och {track_name} med miljöns tekniska namn. Om du genererar en proxy från Swagger (OpenAPI) dokumentet, levereras variablerna som input parametrar.
Till exempel, för att läsa en OpenID Connect applikationsregistrering i FoxIDs Cloud med tekniskt namn some_oidc_app, anropa (HTTP GET) https://control.foxids.com/api/{tenant_name}/{track_name}/!oidcdownparty?name=some_oidc_app (ersätt variablerna med ditt tenant namn och tekniskt miljö namn).
Du kan anropa Control API antingen som en service daemon med en OAuth 2.0 client (client credentials) eller i kontexten av en användare via en OpenID Connect client.
Stegen nedan skapar en OAuth 2.0 client och ger den admin nivå access rights via scopes och roller.
Skapa en OAuth 2.0 client i FoxIDs Control Client:
- Välj master miljön (i headern).
- Välj Applications fliken.
- Klicka New Application.
- Klicka Backend Application.
- Lägg till ett Name t.ex.
My API Client. - Klicka Register.
- Kopiera Client ID och Client secret.
- Klicka Close.
- Lägg till ett Name t.ex.
- Klicka din client registrering i listan för att öppna den.
- I sektionen Resource and scopes - ger clienten tillgång till din tenant:
- Klicka Add Resource and scope och lägg till resursen
foxids_control_api. - Klicka Add Scope och lägg till scopet
foxids:tenant.
- Klicka Add Resource and scope och lägg till resursen
- Välj Show advanced.
- I sektionen Issue claims - ger clienten tenant administratör rollen:
- Klicka Add Claim och lägg till claim
role. - Klicka Add Value och lägg till claim värde
foxids:tenant.admin.
- Klicka Add Claim och lägg till claim
- Klicka Update.
Gör sedan en OAuth 2.0 Client Credentials Grant request för att få ett access token till Control API.
Ersätt {tenant_name}, {track_name}, {client_id} och {client_secret}. Byt domän om du self hostar.
Postman sample
Denna Postman collection autentiserar med OAuth 2.0 clienten My API Client och returnerar användarna för den konfigurerade miljön (track).
Skapa en Postman collection JSON fil, t.ex. foxids_control_api.postman_collection.json, med innehållet nedan. Ersätt {tenant_name}, {track_name}, {client_id} och {client_secret}. Byt domäner (foxids.com och control.foxids.com) om du self hostar.
{
"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
Denna HTTP sample autentiserar 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 används för att anropa Control API.
C# code sample
Denna C# sample autentiserar 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);
Anropa sedan Control API med access token som Authorization Bearer header, enligt OAuth 2.0 Bearer Token (RFC 6750) standarden.
C# code sample
Denna C# sample visar hur du lägger till access token i HttpClient och läser OpenID Connect applikationsregistreringen some_oidc_app (tekniskt namn).
// 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
Detta visar Control API konfigurationen i en tenants master miljö med default uppsättning scopes som ger åtkomst till tenant data.

Du kan lägga till fler scopes för att utöka Control API åtkomst per miljö för att uppnå least privilege konfigurationer.
Åtkomst till Control API är begränsad av scopes och roller. Det finns två scope familjer: foxids:master ger åtkomst till master tenant data och foxids:tenant ger åtkomst till tenant data.
Control API resursen foxids_control_api är definierad i varje tenants master miljö, och de konfigurerade scopes ger åtkomst till tenant data via Control API.
En scopes åtkomst kan begränsas genom att lägga till fler element separerade med semikolon och punkter. Punkt notering begränsar till en specifik sub roll och används både i scopes och roller. Callers måste presentera en eller flera matchande scope(s) och roll(er).
Varje åtkomsträtt är definierad både som ett scope och en roll. Detta gör det möjligt att ge eller begränsa åtkomst på både client och användare nivå. Åtkomsträttigheter är hierarkiska, och client och användare behöver inte matchande scopes och roller.
Administratör rollen foxids:tenant.admin ger åtkomst till all data i en tenant och master tenant data; den är likvärdig med rollerna foxids:tenant och foxids:master.
En client begär ett scope genom att ange resource och scope separerat med ett semikolon. Till exempel, för att begära scopet foxids:tenant:track:party.create begär clienten foxids_control_api:foxids:tenant:track:party.create.
Om en request nekas på grund av otillräckliga åtkomsträttigheter loggas ett trace item med möjliga authoriserande scopes och roller tillsammans med användarens faktiska scopes och roller.
Tenant access rights
Tenant access rights är både scopes och roller.
Om scopet du behöver inte är definierat på Control API
foxids_control_apikan du lägga till scopet.
:track[xxxx] specificerar en miljö med tekniskt namn. t.ex. en Test miljö med tekniskt namn hsgm7je5 är :track[hsgm7je5]
och en Production miljö med tekniskt namn - är :track[-].
| Scope / role | Access |
|---|---|
| Åtkomst till allt i tenant, inte 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 |
| Åtkomst till grundläggande tenant element:
|
|
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 |
| Åtkomst till allt i alla miljöer i en tenant, inte inklusive master miljön. | |
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 |
| Åtkomst till allt i en specifik miljö i en tenant. `xxxx` är miljöns tekniska namn. | |
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 |
| Alla usage logs i alla miljöer i en tenant, inte inklusive master miljön. Inte relevant i master tenant. | |
foxids:tenant:track:usage |
read |
| Usage logs i en specifik miljö i en tenant. Inte relevant i master tenant. | |
foxids:tenant:track[xxxx]:usage |
read |
| Alla audit logs i alla miljöer i en tenant, inte inklusive master miljön. | |
foxids:tenant:track:audit |
read |
| Audit logs i en specifik miljö i en tenant. | |
foxids:tenant:track[xxxx]:audit |
read |
| Alla logs i alla miljöer i en tenant, inte inklusive master miljön. | |
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 en specifik 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 |
| Alla användare i alla miljöer i en tenant, inte inklusive master miljön. | |
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 |
| Alla användare i en specifik 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 |
| Alla applikationsregistreringar och autentiseringsmetoder i alla miljöer i en tenant, inte inklusive master miljön. | |
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 |
| Alla applikationsregistreringar och autentiseringsmetoder i en specifik 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 access rights är både scopes och roller.
| Scope / role | Access |
|---|---|
| Åtkomst till master tenant data Kan lista, skapa och ta bort tenants men inte se in i andra 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 |