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.

Configure 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 :

  1. Ouvrez l’environnement master
  2. Sélectionnez l’onglet Users
  3. Cliquez sur Create User
  4. Ajoutez les informations utilisateur et cliquez sur Create.

Configure administrator user

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 :

  1. Créez ou ouvrez l’utilisateur dans l’environnement master (onglet Users).
  2. 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).
  3. Décidez de ce que l’utilisateur est autorisé à voir :
    • Pour limiter la visibilité à un environnement, ajoutez foxids:tenant:track[vh2csjt4].read (remplacez vh2csjt4 par le nom technique de l’environnement).
    • Pour autoriser tous les environnements, ajoutez foxids:tenant.read.
  4. Ajoutez les rôles d’opération nécessaires à l’utilisateur dans chaque environnement. Exemples : foxids:tenant:track[vh2csjt4]:user pour gérer les utilisateurs, foxids:tenant:track[vh2csjt4]:party pour 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.read plus un rôle de lecture d’environnement (foxids:tenant:track[main].read ou foxids: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ôle foxids: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.

Configure environments

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.

Configure application registrations and authentication methods

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.

Configure certificates

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.

Configure environment settings

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 :

  1. Sélectionnez l’environnement master (dans l’en-tête).
  2. Sélectionnez l’onglet Applications.
  3. Cliquez sur New Application.
  4. Cliquez sur Backend Application.
    1. Ajoutez un Name par exemple My API Client.
    2. Cliquez sur Register.
    3. Copiez le Client ID et le Client secret.
    4. Cliquez sur Close.
  5. Cliquez sur votre enregistrement de client dans la liste pour l’ouvrir.
  6. Dans la section Resource and scopes - accorde au client l’accès à votre tenant :
    1. Cliquez sur Add Resource and scope et ajoutez la ressource foxids_control_api.
    2. Cliquez sur Add Scope et ajoutez le scope foxids:tenant.
  7. Sélectionnez Show advanced.
  8. Dans la section Issue claims - accorde au client le rôle d’administrateur de tenant :
    1. Cliquez sur Add Claim et ajoutez la revendication role.
    2. Cliquez sur Add Value et ajoutez la valeur de revendication foxids:tenant.admin.
  9. 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.

Configure foxids_control_api

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 :
  • Mon profil utilisé dans le Control Client.
  • Appeler l’API ReadCertificate pour obtenir un JWT avec les informations de certificat d’un certificat X509.
  • 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

    Votre confidentialité

    Nous utilisons des cookies pour améliorer votre expérience sur nos sites. Cliquez sur « Accepter tous les cookies » pour accepter l'utilisation des cookies. Pour refuser les cookies non essentiels, cliquez sur « Cookies nécessaires uniquement ».

    Consultez notre politique de confidentialité pour en savoir plus