FoxIDs Control
FoxIDs est configuré via FoxIDs Control qui se compose du Control Client et de l’API Control. Le Control Client et l’API sont sécurisés par FoxIDs, et le Control Client utilise l’API Control.
L’API Control contient toutes les fonctionnalités de configuration. Il est donc possible d’automatiser la configuration en intégrant l’API Control.
FoxIDs Control Client
Le Control Client est une application Blazor WebAssembly (WASM).
Ouvrez votre Control Client sur FoxIDs.com.
Tenant et environnement master
Si vous utilisez FoxIDs.com, votre tenant est créé lors de l’inscription.
Si vous déployez FoxIDs (auto-hébergé), vous avez accès au tenant master. Créez d’abord un tenant pour contenir votre configuration de sécurité. La plupart des installations n’en ont besoin que d’un, mais vous pouvez configurer un nombre illimité de tenants.

Un tenant contient un environnement master, à partir duquel l’ensemble du tenant est configuré. L’environnement master contient un référentiel d’utilisateurs et, lors de la création, un seul utilisateur administrateur.
Normalement, vous ne devez pas modifier la configuration de l’environnement master ni ajouter de nouvelles méthodes d’authentification ou enregistrements d’applications, mais c’est possible. Vous pouvez par exemple ajouter une méthode d’authentification pour obtenir le single sign-on (SSO) vers l’environnement master.
Créer des utilisateurs administrateurs
Il est possible de créer d’autres utilisateurs administrateurs dans l’environnement master. Un utilisateur devient administrateur en ajoutant le rôle administrateur foxids:tenant.admin, comme indiqué ci-dessous.
Créer un utilisateur :
- Ouvrez l’environnement master
- Sélectionnez l’onglet Users
- Cliquez sur Create User
- Ajoutez les informations utilisateur et cliquez sur Create.

Accorder l’accès à un utilisateur
L’accès est accordé via des rôles. Les scopes ne sont nécessaires que lorsqu’un client demande un jeton pour l’API Control ; le Control Client demande déjà le scope requis sur foxids_control_api, vous attribuez donc généralement uniquement des rôles à l’utilisateur dans l’environnement master.
Pour permettre à une personne de se connecter au Control Client et de voir les données de configuration :
- Créez ou ouvrez l’utilisateur dans l’environnement
master(onglet Users). - Ajoutez le rôle de base
foxids:tenant:basic.read(nécessaire pour que le Control Client charge le profil et les outils d’assistance). - Décidez de ce que l’utilisateur est autorisé à voir :
- Pour limiter la visibilité à un environnement, ajoutez
foxids:tenant:track[vh2csjt4].read(remplacezvh2csjt4par le nom technique de l’environnement). - Pour autoriser tous les environnements, ajoutez
foxids:tenant.read.
- Pour limiter la visibilité à un environnement, ajoutez
- Ajoutez les rôles d’opération nécessaires à l’utilisateur dans chaque environnement. Exemples :
foxids:tenant:track[vh2csjt4]:userpour gérer les utilisateurs,foxids:tenant:track[vh2csjt4]:partypour gérer les applications et les méthodes d’authentification.
Control Client vs API uniquement :
- Le Control Client (UI interactive) lit les données de profil et les listes d’environnements en plus de l’API spécifique que vous souhaitez gérer. Il a donc besoin de
foxids:tenant:basic.readplus un rôle de lecture d’environnement (foxids:tenant:track[main].readoufoxids:tenant.read) en plus de vos rôles d’action. - Les appels API uniquement peuvent être plus limités. Si un service backend appelle uniquement l’API des utilisateurs pour l’environnement
vh2csjt4, le rôlefoxids:tenant:track[vh2csjt4]:user(et la demande du scope correspondant lors de l’utilisation des identifiants client) suffit ; les rôles de lecture supplémentaires ne sont pas nécessaires car aucune donnée UI ne doit être chargée.
Environnements
Configurez un certain nombre d’environnements, un pour chacun de vos environnements, par exemple dev, qa et prod.
Créez un ou plusieurs environnements, ne placez pas la configuration dans l’environnement master.

Chaque environnement contient un référentiel d’utilisateurs et une méthode d’authentification login par défaut.
Vous pouvez ajouter des enregistrements d’applications et des méthodes d’authentification OpenID Connect, OAuth 2.0 et SAML 2.0.

Un environnement contient un certificat principal et éventuellement un certificat secondaire dans l’onglet Certificates. Il est possible de basculer entre le certificat principal et le certificat secondaire si les deux sont configurés, selon le type de conteneur de certificat.

Les propriétés de l’environnement peuvent être configurées en cliquant sur l’icône de paramètres en haut à droite.
- La durée de vie des séquences correspond à la durée maximale du flux de connexion d’un utilisateur du début à la fin.
- FoxIDs protège contre les tentatives de deviner les mots de passe via le nombre maximal d’échecs de connexion, la durée de vie du nombre d’échecs et la période d’observation.
- Les exigences de mot de passe sont configurées en termes de longueur, complexité et risque de mot de passe.
- Il est possible d’héberger FoxIDs dans une iframe à partir de domaines autorisés.
- Vous pouvez envoyer des emails avec votre propre tenant SendGrid en ajoutant une adresse email personnalisée et une clé SendGrid.

FoxIDs Control API
L’API Control est une API REST avec une description d’interface Swagger (OpenAPI) en ligne et la Swagger UI.
Si vous auto-hébergez FoxIDs, le document Swagger (OpenAPI) est exposé dans FoxIDs Control sur .../api/swagger/v2/swagger.json et la Swagger UI sur .../api/swagger.
Nommage API Control :
- Un environnement est appelé un
track- Un enregistrement d’application est appelé un
downparty- Une méthode d’authentification est appelée un
upparty
L’URL de l’API Control contient des variables pour le nom du tenant et le nom du track (nom de l’environnement) sur lequel vous souhaitez agir : .../{tenant_name}/{track_name}/....
Remplacez {tenant_name} par le nom de votre tenant et {track_name} par le nom technique de l’environnement. Si vous générez un proxy à partir du document Swagger (OpenAPI), ces variables sont fournies comme paramètres d’entrée.
Par exemple, pour lire un enregistrement d’application OpenID Connect sur FoxIDs Cloud avec le nom technique some_oidc_app, appelez (HTTP GET) https://control.foxids.com/api/{tenant_name}/{track_name}/!oidcdownparty?name=some_oidc_app (remplacez les variables par le nom de votre tenant et le nom technique de l’environnement).
Vous pouvez appeler l’API Control soit en tant que service/daemon utilisant un client OAuth 2.0 (client credentials), soit dans le contexte d’un utilisateur via un client OpenID Connect.
Les étapes ci-dessous créent un client OAuth 2.0 et lui accordent des droits d’accès de niveau administrateur via des scopes et des rôles.
Créer un client OAuth 2.0 dans le FoxIDs Control Client :
- Sélectionnez l’environnement master (dans l’en-tête).
- Sélectionnez l’onglet Applications.
- Cliquez sur New Application.
- Cliquez sur Backend Application.
- Ajoutez un Name par exemple
My API Client. - Cliquez sur Register.
- Copiez le Client ID et le Client secret.
- Cliquez sur Close.
- Ajoutez un Name par exemple
- Cliquez sur votre enregistrement de client dans la liste pour l’ouvrir.
- Dans la section Resource and scopes - accorde au client l’accès à votre tenant :
- Cliquez sur Add Resource and scope et ajoutez la ressource
foxids_control_api. - Cliquez sur Add Scope et ajoutez le scope
foxids:tenant.
- Cliquez sur Add Resource and scope et ajoutez la ressource
- Sélectionnez Show advanced.
- Dans la section Issue claims - accorde au client le rôle d’administrateur de tenant :
- Cliquez sur Add Claim et ajoutez la revendication
role. - Cliquez sur Add Value et ajoutez la valeur de revendication
foxids:tenant.admin.
- Cliquez sur Add Claim et ajoutez la revendication
- Cliquez sur Update.
Ensuite, effectuez une requête OAuth 2.0 Client Credentials Grant pour obtenir un jeton d’accès pour l’API Control.
Remplacez {tenant_name}, {track_name}, {client_id} et {client_secret}. Changez le domaine si vous auto-hébergez.
Exemple Postman
Cette collection Postman s’authentifie avec le client OAuth 2.0 My API Client et renvoie les utilisateurs pour l’environnement (track) configuré.
Créez un fichier JSON de collection Postman, par exemple foxids_control_api.postman_collection.json, avec le contenu ci-dessous. Remplacez {tenant_name}, {track_name}, {client_id} et {client_secret}. Changez les domaines (foxids.com et control.foxids.com) si vous auto-hébergez.
{
"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"
]
}
}
}
]
}
Exemple de requête HTTP
Cet exemple HTTP s’authentifie en tant que client OAuth 2.0 My API Client avec le grant client credentials.
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
Réponse JSON du jeton :
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
}
Le access_token est utilisé pour appeler l’API Control.
Exemple de code C#
Cet exemple C# s’authentifie en tant que client OAuth 2.0 My API Client avec le grant client credentials.
// 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);
Ensuite, appelez l’API Control avec le jeton d’accès en en-tête Authorization Bearer, tel que défini dans la norme OAuth 2.0 Bearer Token (RFC 6750).
Exemple de code C#
Cet exemple C# montre comment ajouter le jeton d’accès au HttpClient et lire l’enregistrement d’application OpenID Connect some_oidc_app (nom technique).
// 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");
Droits d’accès à l’API
Cela montre la configuration de l’API Control dans l’environnement master d’un tenant avec l’ensemble par défaut de scopes qui accordent l’accès aux données du tenant.

Vous pouvez ajouter davantage de scopes pour étendre les droits d’accès à l’API Control par environnement afin d’obtenir des configurations à moindre privilège.
L’accès à l’API Control est limité par des scopes et des rôles. Il existe deux familles de scopes : foxids:master accorde l’accès aux données du tenant master et foxids:tenant accorde l’accès aux données du tenant.
La ressource de l’API Control foxids_control_api est définie dans l’environnement master de chaque tenant, et les scopes configurés accordent l’accès aux données de ce tenant via l’API Control.
L’accès d’un scope peut être restreint en ajoutant des éléments supplémentaires séparés par des points-virgules et des points. La notation par points limite à un sous-rôle spécifique et est utilisée à la fois dans les scopes et les rôles. Les appelants doivent présenter un ou plusieurs scope(s) et rôle(s) correspondants.
Chaque droit d’accès est défini à la fois comme scope et rôle. Cela vous permet d’accorder ou de limiter l’accès au niveau du client et de l’utilisateur. Les droits d’accès sont hiérarchiques, et le client et l’utilisateur n’ont pas besoin de scopes et de rôles correspondants.
Le rôle administrateur foxids:tenant.admin accorde l’accès à toutes les données d’un tenant et aux données du tenant master ; il équivaut à avoir les rôles foxids:tenant et foxids:master.
Un client demande un scope en spécifiant la ressource et le scope séparés par un point-virgule. Par exemple, pour demander le scope foxids:tenant:track:party.create, le client demande foxids_control_api:foxids:tenant:track:party.create.
Si une requête est refusée en raison de droits d’accès insuffisants, un élément de trace est enregistré avec les scopes et rôles autorisants possibles ainsi que les scopes et rôles réels de l’utilisateur.
Droits d’accès du tenant
Les droits d’accès du tenant sont à la fois des scopes et des rôles.
Si le scope dont vous avez besoin n’est pas défini sur l’API Control
foxids_control_api, vous pouvez ajouter le scope.
Le :track[xxxx] spécifie un environnement par nom technique. Par exemple, un environnement Test avec le nom technique hsgm7je5 est :track[hsgm7je5]
et un environnement Production avec le nom technique - est :track[-].
| Scope / role | Access |
|---|---|
| Accès à tout dans le tenant, pas aux données du tenant master. | |
foxids:tenant |
read, create, update, delete |
foxids:tenant.read |
read |
foxids:tenant.create |
create |
foxids:tenant.update |
update |
foxids:tenant.delete |
delete |
| Accès aux éléments de base du tenant :
|
|
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 |
| Accès à tout dans tous les environnements d’un tenant, sans inclure l’environnement master. | |
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 |
| Accès à tout dans un environnement spécifique d’un tenant. `xxxx` est le nom technique de l’environnement. | |
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 |
| Tous les journaux d’utilisation dans tous les environnements d’un tenant, sans inclure l’environnement master. Non applicable dans le tenant master. | |
foxids:tenant:track:usage |
read |
| Journaux d’utilisation dans un environnement spécifique d’un tenant. Non applicable dans le tenant master. | |
foxids:tenant:track[xxxx]:usage |
read |
| Tous les journaux d’audit dans tous les environnements d’un tenant, sans inclure l’environnement master. | |
foxids:tenant:track:audit |
read |
| Journaux d’audit dans un environnement spécifique d’un tenant. | |
foxids:tenant:track[xxxx]:audit |
read |
| Tous les journaux dans tous les environnements d’un tenant, sans inclure l’environnement master. | |
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 |
| Journaux dans un environnement spécifique d’un tenant. | |
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 |
| Tous les utilisateurs dans tous les environnements d’un tenant, sans inclure l’environnement master. | |
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 |
| Tous les utilisateurs dans un environnement spécifique d’un 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 |
| Tous les enregistrements d’applications et méthodes d’authentification dans tous les environnements d’un tenant, sans inclure l’environnement master. | |
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 |
| Tous les enregistrements d’applications et méthodes d’authentification dans un environnement spécifique d’un 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 |
Droits d’accès du tenant master
Les droits d’accès du tenant master sont à la fois des scopes et des rôles.
| Scope / role | Access |
|---|---|
| Accès aux données du tenant master Peut lister, créer et supprimer des tenants mais pas consulter d’autres tenants. |
|
foxids:master |
read, create, update, delete |
foxids:master.read |
read |
foxids:master.create |
create |
foxids:master.update |
update |
foxids:master.delete |
delete |
| Journal d’audit dans le tenant master. | |
foxids:master:audit |
read |
| Journal d’utilisation dans le tenant master. | |
foxids:master:usage |
read |