FoxIDs Control

FoxIDs se configura a través de FoxIDs Control, que consiste en Control Client y Control API. Control Client y la API están protegidos por FoxIDs, y Control Client usa Control API.

Control API contiene toda la funcionalidad de configuración. Por lo tanto, es posible automatizar la configuración integrando Control API.

FoxIDs Control Client

Control Client es una aplicación Blazor WebAssembly (WASM).

Abre tu Control Client en FoxIDs.com.

Tenant y entorno master

Si usas FoxIDs.com, tu tenant se crea durante el registro.

Si implementas FoxIDs (auto hospedado) obtienes acceso al tenant master. Primero crea un tenant para contener tu configuración de seguridad. La mayoría de las instalaciones solo necesitan uno, pero puedes configurar un número ilimitado de tenants.

Configure tenants

Un tenant contiene un entorno master, desde donde se configura todo el tenant. El entorno master contiene un repositorio de usuarios y en la creación solo un usuario administrador.

Normalmente no debes cambiar la configuración del entorno master ni añadir nuevos métodos de autenticación o registros de aplicaciones, pero es posible. Puedes, por ejemplo, al añadir un método de autenticación, obtener single sign-on (SSO) para el entorno master.

Crear usuarios administradores

Es posible crear más usuarios administradores en el entorno master. Un usuario se convierte en administrador al añadir el rol de administrador foxids:tenant.admin, como se muestra a continuación.

Crear un usuario:

  1. Abre el entorno master
  2. Selecciona la pestaña Users
  3. Haz clic en Create User
  4. Añade la información del usuario y haz clic en Create.

Configure administrator user

Conceder acceso al usuario

El acceso se concede con roles. Los scopes solo se necesitan cuando un cliente solicita un token para Control API; Control Client ya solicita el scope requerido en foxids_control_api, por lo que normalmente solo asignas roles al usuario en el entorno master.

Para permitir que una persona inicie sesión en Control Client y vea los datos de configuración:

  1. Crea o abre el usuario en el entorno master (pestaña Users).
  2. Añade el rol base foxids:tenant:basic.read (necesario para que Control Client cargue el perfil y las herramientas de ayuda).
  3. Decide lo que el usuario puede ver:
    • Para limitar la visibilidad a un entorno, añade foxids:tenant:track[vh2csjt4].read (reemplaza vh2csjt4 con el nombre técnico del entorno).
    • Para permitir todos los entornos, añade foxids:tenant.read.
  4. Añade los roles de operación que el usuario necesite en cada entorno. Ejemplos: foxids:tenant:track[vh2csjt4]:user para gestionar usuarios, foxids:tenant:track[vh2csjt4]:party para gestionar aplicaciones y métodos de autenticación.

Control Client vs solo API:

  • Control Client (UI interactiva) lee datos de perfil y listas de entornos además de la API específica que deseas gestionar. Por lo tanto, necesita foxids:tenant:basic.read más un rol de lectura de entorno (foxids:tenant:track[main].read o foxids:tenant.read) junto con tus roles de acción.
  • Los consumidores solo API pueden ser más limitados. Si un servicio backend solo llama a la API de usuarios para el entorno vh2csjt4, el rol foxids:tenant:track[vh2csjt4]:user (y solicitar el scope correspondiente cuando se usan credenciales de cliente) es suficiente; los roles de lectura adicionales no son necesarios porque no se necesita cargar datos de UI.

Entornos

Configura varios entornos, uno por cada uno de tus entornos, por ejemplo dev, qa y prod.

Crea uno o más entornos, no coloques la configuración en el entorno master.

Configure environments

Cada entorno contiene un repositorio de usuarios y un método de autenticación login predeterminado.

Puedes añadir registros de aplicaciones y métodos de autenticación OpenID Connect, OAuth 2.0 y SAML 2.0.

Configure application registrations and authentication methods

Un entorno contiene un certificado principal y, posiblemente, un certificado secundario en la pestaña Certificates. Es posible alternar entre el certificado principal y el secundario si ambos están configurados, según el tipo de contenedor de certificado.

Configure certificates

Las propiedades del entorno se pueden configurar haciendo clic en el icono de configuración en la parte superior derecha.

  • El tiempo de vida de la secuencia es el tiempo máximo de un flujo de inicio de sesión del usuario desde el inicio hasta el final.
  • FoxIDs protege contra el intento de adivinar contraseñas mediante el máximo de inicios de sesión fallidos, el tiempo de vida del conteo de fallos y el periodo de observación.
  • Los requisitos de contraseña se configuran en cuanto a longitud, complejidad y riesgo de contraseña.
  • Es posible alojar FoxIDs en un iframe desde dominios permitidos.
  • Puedes enviar correos con tu propio tenant de SendGrid agregando una dirección de correo personalizada y una clave de SendGrid.

Configure environment settings

FoxIDs Control API

Control API es una API REST con una descripción de interfaz Swagger (OpenAPI) en línea y la Swagger UI.

Si auto hospedas FoxIDs, el documento Swagger (OpenAPI) se expone en FoxIDs Control en .../api/swagger/v2/swagger.json y la Swagger UI en .../api/swagger.

Nomenclatura de Control API:

  • Un entorno se llama track
  • Un registro de aplicación se llama downparty
  • Un método de autenticación se llama upparty

La URL de Control API contiene variables para el nombre del tenant y el nombre del track (nombre del entorno) con el que quieres operar: .../{tenant_name}/{track_name}/.... Reemplaza {tenant_name} con el nombre de tu tenant y {track_name} con el nombre técnico del entorno. Si generas un proxy a partir del documento Swagger (OpenAPI), esas variables se proporcionan como parámetros de entrada.

Por ejemplo, para leer un registro de aplicación OpenID Connect en FoxIDs Cloud con el nombre técnico some_oidc_app, llama (HTTP GET) https://control.foxids.com/api/{tenant_name}/{track_name}/!oidcdownparty?name=some_oidc_app (reemplaza las variables con el nombre de tu tenant y el nombre técnico del entorno).

Puedes llamar a Control API como un servicio/daemon usando un cliente OAuth 2.0 (client credentials) o en el contexto de un usuario a través de un cliente OpenID Connect.

Los pasos siguientes crean un cliente OAuth 2.0 y le otorgan derechos de acceso de nivel administrador mediante scopes y roles.

Crear un cliente OAuth 2.0 en el FoxIDs Control Client:

  1. Selecciona el entorno master (en el encabezado).
  2. Selecciona la pestaña Applications.
  3. Haz clic en New Application.
  4. Haz clic en Backend Application.
    1. Añade un Name por ejemplo My API Client.
    2. Haz clic en Register.
    3. Copia el Client ID y el Client secret.
    4. Haz clic en Close.
  5. Haz clic en tu registro de cliente en la lista para abrirlo.
  6. En la sección Resource and scopes - concede al cliente acceso a tu tenant:
    1. Haz clic en Add Resource and scope y añade el recurso foxids_control_api.
    2. Haz clic en Add Scope y añade el scope foxids:tenant.
  7. Selecciona Show advanced.
  8. En la sección Issue claims - concede al cliente el rol de administrador del tenant:
    1. Haz clic en Add Claim y añade el claim role.
    2. Haz clic en Add Value y añade el valor del claim foxids:tenant.admin.
  9. Haz clic en Update.

Luego realiza una solicitud OAuth 2.0 Client Credentials Grant para obtener un token de acceso para Control API.

Reemplaza {tenant_name}, {track_name}, {client_id} y {client_secret}. Cambia el dominio si estás auto hospedando.

Ejemplo de Postman
Esta colección de Postman autentica con el cliente OAuth 2.0 My API Client y devuelve los usuarios para el entorno (track) configurado.

Crea un archivo JSON de colección de Postman, por ejemplo foxids_control_api.postman_collection.json, con el contenido siguiente. Reemplaza {tenant_name}, {track_name}, {client_id} y {client_secret}. Cambia los dominios (foxids.com y control.foxids.com) si estás auto hospedando.

{
  "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"
          ]
        }
      }
    }
  ]
}

Ejemplo de solicitud HTTP
Este ejemplo HTTP se autentica como el cliente OAuth 2.0 My API Client con el grant de 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

Respuesta JSON del token:

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
}

El access_token se utiliza para llamar a Control API.

Ejemplo de código C#
Este ejemplo de C# se autentica como el cliente OAuth 2.0 My API Client con el grant de 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);

Luego llama a Control API con el token de acceso en el encabezado Authorization Bearer, tal como se define en el estándar OAuth 2.0 Bearer Token (RFC 6750).

Ejemplo de código C#
Este ejemplo de C# muestra cómo agregar el token de acceso al HttpClient y leer el registro de aplicación OpenID Connect some_oidc_app (nombre técnico).

// 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");

Derechos de acceso a la API

Esto muestra la configuración de Control API en el entorno master de un tenant con el conjunto predeterminado de scopes que conceden acceso a los datos del tenant.

Configure foxids_control_api

Puedes agregar más scopes para ampliar los derechos de acceso a Control API por entorno y lograr configuraciones de mínimo privilegio.

El acceso a Control API está limitado por scopes y roles. Hay dos familias de scopes: foxids:master concede acceso a los datos del tenant master y foxids:tenant concede acceso a los datos del tenant.
El recurso de Control API foxids_control_api se define en el entorno master de cada tenant, y los scopes configurados conceden acceso a los datos de ese tenant a través de Control API.

El acceso de un scope puede limitarse agregando más elementos separados por puntos y punto y coma. La notación de puntos limita a un sub-rol específico y se usa tanto en scopes como en roles. Los consumidores deben presentar uno o más scope(s) y rol(es) coincidentes.

Cada derecho de acceso se define tanto como scope como rol. Esto te permite conceder o limitar el acceso tanto a nivel de cliente como de usuario. Los derechos de acceso son jerárquicos, y el cliente y el usuario no necesitan scopes y roles coincidentes.

El rol administrador foxids:tenant.admin concede acceso a todos los datos de un tenant y a los datos del tenant master; equivale a tener los roles foxids:tenant y foxids:master.

Un cliente solicita un scope especificando el recurso y el scope separados por un punto y coma. Por ejemplo, para solicitar el scope foxids:tenant:track:party.create, el cliente solicita foxids_control_api:foxids:tenant:track:party.create.

Si una solicitud es denegada por derechos de acceso insuficientes, se registra un elemento de trazas con los posibles scopes y roles autorizantes junto con los scopes y roles reales del usuario.

Derechos de acceso del tenant

Los derechos de acceso del tenant son tanto scopes como roles.

Si el scope que necesitas no está definido en Control API foxids_control_api, puedes agregar el scope.

El :track[xxxx] especifica un entorno por el nombre técnico. Por ejemplo, un entorno Test con el nombre técnico hsgm7je5 es :track[hsgm7je5] y un entorno Production con el nombre técnico - es :track[-].

Scope / role Access
Acceso a todo en el tenant, no a los datos del tenant master.
foxids:tenant read, create, update, delete
foxids:tenant.read read
foxids:tenant.create create
foxids:tenant.update update
foxids:tenant.delete delete
Acceso a elementos básicos del tenant:
  • Mi perfil usado en el Control Client.
  • Llamar a la API ReadCertificate para obtener un JWT con la información del certificado desde un certificado 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
    Acceso a todo en todos los entornos de un tenant, sin incluir el entorno 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
    Acceso a todo en un entorno específico de un tenant. `xxxx` es el nombre técnico del entorno.
    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
    Todos los registros de uso en todos los entornos de un tenant, sin incluir el entorno master. No aplicable en el tenant master.
    foxids:tenant:track:usage read
    Registros de uso en un entorno específico de un tenant. No aplicable en el tenant master.
    foxids:tenant:track[xxxx]:usage read
    Todos los registros de auditoría en todos los entornos de un tenant, sin incluir el entorno master.
    foxids:tenant:track:audit read
    Registros de auditoría en un entorno específico de un tenant.
    foxids:tenant:track[xxxx]:audit read
    Todos los registros en todos los entornos de un tenant, sin incluir el entorno 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
    Registros en un entorno específico de 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
    Todos los usuarios en todos los entornos de un tenant, sin incluir el entorno 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
    Todos los usuarios en un entorno específico de 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
    Todos los registros de aplicaciones y métodos de autenticación en todos los entornos de un tenant, sin incluir el entorno 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
    Todos los registros de aplicaciones y métodos de autenticación en un entorno específico de 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

    Derechos de acceso del tenant master

    Los derechos de acceso del tenant master son tanto scopes como roles.

    Scope / role Access
    Acceso a los datos del tenant master
    Puede listar, crear y eliminar tenants pero no consultar otros tenants.
    foxids:master read, create, update, delete
    foxids:master.read read
    foxids:master.create create
    foxids:master.update update
    foxids:master.delete delete
    Registro de auditoría en el tenant master.
    foxids:master:audit read
    Registro de uso en el tenant master.
    foxids:master:usage read

    Tu privacidad

    Usamos cookies para mejorar tu experiencia en nuestros sitios web. Haz clic en «Aceptar todas las cookies» para aceptar su uso. Para rechazar cookies no esenciales, haz clic en «Solo cookies necesarias».

    Visita nuestra política de privacidad para saber más