El protocolo OIDC es el estándar moderno de autenticación. Anjana Data permite configurar múltiples proveedores simultáneamente mediante security.authentication.oidc.
Prerequisito: el usuario debe existir en Anjana
Para que el inicio de sesión mediante OIDC sea satisfactorio, el usuario debe estar registrado previamente en la base de datos de Anjana. La autenticación OIDC verifica la identidad en el proveedor externo, pero Anjana siempre comprueba que el usuario exista localmente antes de conceder el acceso. Si el usuario se autentica con éxito en el IdP pero no está registrado en Anjana, el acceso será denegado. Consulte cómo registrar usuarios de forma automática en la guía de Aprovisionamiento de usuarios.
1. URL de redirección (Callback / Redirect URI)
Para que la integración funcione, es crítico registrar correctamente la URL de retorno en su Proveedor de Identidad. Esta es la dirección a la que el proveedor enviará al usuario después de autenticarse.
La URL se construye siguiendo este patrón: https://{dominio-anjana}/gateway/oidc2/sso/{registrationId}
-
dominio-anjana: Su dominio público (ej:
app.midominio.com). -
registrationId: La clave exacta que utilice en el YAML para definir el proveedor.
Ejemplo: Si configura un proveedor con la clave
https://app.midominio.com/gateway/oidc2/sso/google
2. Propiedades de configuración
Cada proveedor OIDC se configura en security.authentication.oidc.providers.<registrationId>, donde <registrationId> es un nombre único interno (ej: google, okta-corp).
|
Propiedad |
Requerido |
Descripción |
|---|---|---|
|
|
✅ Sí |
Nombre amigable que se mostrará a los usuarios en la pantalla de login (ej: "Acceder con Google" o "Login Corporativo"). |
|
|
❌ No |
Subtipo de proveedor para adaptar la interfaz gráfica (logos, estilos). Valores permitidos: |
|
|
✅ Sí |
URL base del Proveedor de Identidad (IdP). La aplicación utiliza esta URL para añadir |
|
|
✅ Sí |
Identificador Público de la aplicación registrado en el proveedor. |
|
|
✅ Sí |
Contraseña o secreto compartido para autenticar la aplicación ante el proveedor. |
|
|
❌ No |
Lista de permisos solicitados al usuario durante el login. Solo es necesario especificar si se requieren scopes distintos a los predeterminados. Defaults por
|
|
|
❌ No |
Nombre del atributo (claim) del endpoint
|
Claims disponibles en /userinfo por proveedor: El atributo configurado en username-attribute debe existir en la respuesta del endpoint /userinfo del IdP, no en el ID token. Referencia de claims por proveedor:
-
Azure AD v2:
sub,name,email,picture. No incluyepreferred_username. -
AWS Cognito:
sub,email(si el scope está habilitado),username,cognito:username. -
Google:
sub,name,email,picture. No incluyepreferred_username. -
Auth0:
sub,nickname,name,email. -
Okta:
sub,preferred_username,email. -
Keycloak:
sub,preferred_username,email.
¿Viene de una configuración anterior? Si está migrando desde una versión previa, consulte las páginas de configuración legacy de cada proveedor donde se detallan las equivalencias con las nuevas propiedades: SSO AWS (Deprecated), SSO Azure (Deprecated), SSO GCP (Deprecated), SSO OKTA/AUTH0 (Deprecated).
3. Configuración por proveedor
A continuación, se detallan los pasos para obtener las credenciales y el ejemplo de configuración para los principales proveedores.
Estructura base del YAML
security:
authentication:
oidc:
# (Opcional) Personalizar rutas si fuera necesario
# authenticate-path: /authenticate
# redirection-base-uri: /sso/{registrationId}
providers:
# Aquí se añaden los proveedores específicos
A. AWS Cognito
Utilice este tipo si su gestión de identidades reside en Amazon Cognito User Pools.
Paso 1: Obtención de datos en AWS Console
-
Vaya a Amazon Cognito > User Pools y seleccione su User Pool.
-
Issuer URI: Formato:
https://cognito-idp.<region>.amazonaws.com/<user_pool_id> -
Vaya a la pestaña App integration.
-
En App client list, cree o seleccione un cliente. Copie el Client ID y Client Secret.
-
Allowed Callback URLs: Añada la URL de retorno de Anjana:
https://<dominio-anjana>/gateway/oidc2/sso/aws-pool
Paso 2: Configuración YAML
security:
authentication:
oidc:
providers:
aws-pool:
name: AWS Login
type: AWS
issuer-uri: https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Example
client-id: "1234567890abcdef"
client-secret: "secret-key-from-aws..."
# scopes por defecto para type AWS: [openid, profile]
# username-attribute por defecto para type AWS: cognito:username
AWS Cognito y el scope email: Por defecto, los App clients de Cognito solo tienen habilitados los scopes openid y profile. Por eso el default de type: AWS no incluye email, evitando el error invalid_scope. Si necesita el email del usuario, puede habilitarlo en AWS Console → Cognito → User pool → App integration → App client → OAuth grants y añadir scopes: [openid, profile, email] en el YAML.
B. Okta
Para organizaciones que utilizan Okta Identity Cloud.
Paso 1: Obtención de datos en Okta Admin
-
Vaya a Applications > Create App Integration (OIDC - Web Application).
-
Sign-in redirect URIs: Añada la URL terminada en la clave del proveedor (ej.
okta-corp):https://<dominio-anjana>/gateway/oidc2/sso/okta-corp -
Copie el Client ID y Client Secret.
-
Issuer URI: Usualmente
https://<su-org>.okta.com.
Paso 2: Configuración YAML
security:
authentication:
oidc:
providers:
okta-corp:
name: Okta Corporate
type: OKTA
issuer-uri: https://dev-123456.okta.com
client-id: "0oa..."
client-secret: "secret..."
# scopes por defecto: [openid, profile, email]
# username-attribute por defecto para type OKTA: preferred_username
C. Auth0
Para integraciones con Auth0.
Paso 1: Obtención de datos en Auth0 Dashboard
-
Cree una Regular Web App.
-
Settings: Copie el Domain (será su Issuer URI), Client ID y Client Secret.
-
Allowed Callback URLs: Añada la URL terminada en la clave (ej.
auth0-login):https://<dominio-anjana>/gateway/oidc2/sso/auth0-login
Paso 2: Configuración YAML
security:
authentication:
oidc:
providers:
auth0-login:
name: Auth0 Access
type: AUTH0
issuer-uri: https://mi-tenant.eu.auth0.com/
client-id: "A1b2C3d4..."
client-secret: "secret..."
# scopes por defecto: [openid, profile, email]
# username-attribute por defecto para type AUTH0: email
Auth0 y username-attribute: Con type: AUTH0, el valor por defecto de username-attribute es email. Si los usuarios de Auth0 deben identificarse por un nombre de usuario distinto al email, puede especificar explícitamente username-attribute: nickname.
D. Microsoft Azure AD (Entra ID)
Para usuarios de Microsoft 365 / Azure.
Paso 1: Obtención de datos en Azure Portal
-
App registrations > New registration.
-
Redirect URI (Web):
https://<dominio-anjana>/gateway/oidc2/sso/azure-oidc -
Copie el Application (client) ID y Directory (tenant) ID.
-
Genere un Client secret y copie el valor.
-
Issuer URI:
https://login.microsoftonline.com/<tenant-id>/v2.0
Paso 2: Configuración YAML
security:
authentication:
oidc:
providers:
azure-oidc:
name: Microsoft Login
type: AZURE
issuer-uri: https://login.microsoftonline.com/8888-9999-aaaa-bbbb/v2.0
client-id: "client-id-uuid"
client-secret: "client-secret-value"
# scopes por defecto: [openid, profile, email]
# username-attribute por defecto para type AZURE: email
Azure AD v2 y preferred_username: Azure AD v2 no devuelve el claim preferred_username en el endpoint /userinfo. Si se configura username-attribute: preferred_username, el login fallará. Con type: AZURE, el valor por defecto email es el correcto y no es necesario especificarlo.
E. Google
Para cuentas de Google Workspace o Cloud Identity.
Paso 1: Obtención de datos en Google Cloud Console
-
Credentials > OAuth client ID > Web application.
-
Authorized redirect URIs:
https://<dominio-anjana>/gateway/oidc2/sso/google -
Copie el Client ID y Client Secret.
-
Issuer URI:
https://accounts.google.com
Paso 2: Configuración YAML
security:
authentication:
oidc:
providers:
google:
name: Google Workspace
type: GOOGLE
issuer-uri: https://accounts.google.com
client-id: "123456-abc.apps.googleusercontent.com"
client-secret: "GOCSPX-..."
# scopes por defecto: [openid, profile, email]
# username-attribute por defecto para type GOOGLE: email
Google y username-attribute: El endpoint /userinfo de Google no incluye preferred_username. Con type: GOOGLE, el valor por defecto de username-attribute es email, por lo que no es necesario especificarlo.
F. Keycloak
Para organizaciones que utilizan Keycloak como servidor de identidad y acceso.
Paso 1: Configuración en Keycloak Admin Console
-
Acceda a la Admin Console de Keycloak y seleccione el realm correspondiente.
-
En Clients > Create client:
-
Client type:
OpenID Connect -
Client ID: Defina un nombre, ej.
anjana-oidc
-
-
En la pestaña Settings:
-
Client authentication:
ON(modo confidencial, necesario para obtenerclient-secret) -
Valid redirect URIs:
https://<dominio-anjana>/gateway/oidc2/sso/keycloak-corp
-
-
En la pestaña Credentials, copie el Client Secret.
-
Issuer URI:
https://<keycloak-server>/realms/<realm>(verifique que/.well-known/openid-configurationsea accesible desde Anjana).
Paso 2: Configuración YAML
security:
authentication:
oidc:
providers:
keycloak-corp:
name: Keycloak Login
type: KEYCLOAK
issuer-uri: https://sso.mi-dominio.com/realms/mi-realm
client-id: "anjana-oidc"
client-secret: "secret-uuid..."
# scopes por defecto para type KEYCLOAK: [openid, profile, email]
# username-attribute por defecto para type KEYCLOAK: preferred_username
Keycloak y preferred_username: Keycloak expone preferred_username en el endpoint /userinfo, por lo que es el username-attribute por defecto para type: KEYCLOAK. Si desea usar el email como identificador, especifique explícitamente username-attribute: email.
G. Proveedor genérico (ADFS, Shibboleth, otros)
Para cualquier otro proveedor compatible con OIDC que no aparezca en la lista anterior (por ejemplo: Active Directory Federation Services, Shibboleth, PingFederate).
Paso 1: Datos requeridos
-
URL base del servidor (Issuer URI) con el endpoint
/.well-known/openid-configurationaccesible desde Anjana. -
Registrar un cliente OIDC confidencial con la Redirect URI:
https://<dominio-anjana>/gateway/oidc2/sso/mi-proveedor
Paso 2: Configuración YAML
security:
authentication:
oidc:
providers:
mi-proveedor:
name: Login Corporativo
type: OTHER
issuer-uri: https://sso.mi-empresa.com
client-id: "anjana-client"
client-secret: "secret-uuid..."
# scopes por defecto: [openid, profile, email]
# username-attribute por defecto para type OTHER: preferred_username