Integraciones

SSO OIDC (OpenID Connect)

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 google en el YAML, la URL a registrar en la consola de Google será: 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

name

Nombre amigable que se mostrará a los usuarios en la pantalla de login (ej: "Acceder con Google" o "Login Corporativo").

type

❌ No

Subtipo de proveedor para adaptar la interfaz gráfica (logos, estilos). Valores permitidos: AZURE, AWS, GOOGLE, OKTA, AUTH0, KEYCLOAK, OTHER. (Por defecto: OTHER). El valor de type también determina los scopes y username-attribute por defecto (ver más abajo).

issuer-uri

URL base del Proveedor de Identidad (IdP). La aplicación utiliza esta URL para añadir /.well-known/openid-configuration y descubrir automáticamente los endpoints de autorización, token y usuario.

client-id

Identificador Público de la aplicación registrado en el proveedor.

client-secret

Contraseña o secreto compartido para autenticar la aplicación ante el proveedor.

scopes

❌ No

Lista de permisos solicitados al usuario durante el login. Solo es necesario especificar si se requieren scopes distintos a los predeterminados. Defaults por type:

  • [openid, profile]AWS (Cognito no habilita el scope email por defecto; añadirlo puede causar invalid_scope)

  • [openid, profile, email]AZURE, GOOGLE, AUTH0, OKTA, KEYCLOAK, OTHER

username-attribute

❌ No

Nombre del atributo (claim) del endpoint /userinfo del IdP que se usará como nombre de usuario en Anjana. Defaults por type:

  • cognito:usernameAWS

  • preferred_usernameOKTA, KEYCLOAK, OTHER

  • emailAZURE, GOOGLE, AUTH0

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 incluye preferred_username.

  • AWS Cognito: sub, email (si el scope está habilitado), username, cognito:username.

  • Google: sub, name, email, picture. No incluye preferred_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

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

  1. Vaya a Amazon Cognito > User Pools y seleccione su User Pool.

  2. Issuer URI: Formato: https://cognito-idp.<region>.amazonaws.com/<user_pool_id>

  3. Vaya a la pestaña App integration.

  4. En App client list, cree o seleccione un cliente. Copie el Client ID y Client Secret.

  5. Allowed Callback URLs: Añada la URL de retorno de Anjana: https://<dominio-anjana>/gateway/oidc2/sso/aws-pool

Paso 2: Configuración YAML

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

  1. Vaya a Applications > Create App Integration (OIDC - Web Application).

  2. 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

  3. Copie el Client ID y Client Secret.

  4. Issuer URI: Usualmente https://<su-org>.okta.com.

Paso 2: Configuración YAML

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

  1. Cree una Regular Web App.

  2. Settings: Copie el Domain (será su Issuer URI), Client ID y Client Secret.

  3. 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

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

  1. App registrations > New registration.

  2. Redirect URI (Web): https://<dominio-anjana>/gateway/oidc2/sso/azure-oidc

  3. Copie el Application (client) ID y Directory (tenant) ID.

  4. Genere un Client secret y copie el valor.

  5. Issuer URI: https://login.microsoftonline.com/<tenant-id>/v2.0

Paso 2: Configuración YAML

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

  1. Credentials > OAuth client ID > Web application.

  2. Authorized redirect URIs: https://<dominio-anjana>/gateway/oidc2/sso/google

  3. Copie el Client ID y Client Secret.

  4. Issuer URI: https://accounts.google.com

Paso 2: Configuración YAML

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

  1. Acceda a la Admin Console de Keycloak y seleccione el realm correspondiente.

  2. En Clients > Create client:

    • Client type: OpenID Connect

    • Client ID: Defina un nombre, ej. anjana-oidc

  3. En la pestaña Settings:

    • Client authentication: ON (modo confidencial, necesario para obtener client-secret)

    • Valid redirect URIs: https://<dominio-anjana>/gateway/oidc2/sso/keycloak-corp

  4. En la pestaña Credentials, copie el Client Secret.

  5. Issuer URI: https://<keycloak-server>/realms/<realm> (verifique que /.well-known/openid-configuration sea accesible desde Anjana).

Paso 2: Configuración YAML

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-configuration accesible desde Anjana.

  • Registrar un cliente OIDC confidencial con la Redirect URI: https://<dominio-anjana>/gateway/oidc2/sso/mi-proveedor

Paso 2: Configuración YAML

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