Identidad personalizada

Puede utilizar su propio proveedor de identidad personalizado cuando realice la autenticación. El proveedor de identidad puede ajustarse a cualquier mecanismo de autenticación alternativo a los soportados por IBM Cloud® App ID, incluidos el propietario o herencia.

Visión general

Al traer su propio proveedor de identidad, puede crear un flujo de autenticación personalizado que utilice sus propios protocolos. Tiene más control como, por ejemplo, información que desea compartir o información que se almacena.

Asegúrese de configurar el proveedor personalizado antes de añadirlo a la aplicación.

¿Cuándo debo utilizar este flujo?

Si App ID no proporciona soporte directo para un proveedor de identidad en concreto, puede utilizar el flujo de identidad personalizado para establecer un puente en el protocolo de autenticación hacia el flujo de autenticación existente de App ID. Por ejemplo, desea utilizar GitHub o LinkedIn para permitir a los usuarios iniciar sesión. Puede utilizar el SDK existente del proveedor de identidad para facilitar la información de autenticación de usuario antes de empaquetarla e intercambiarla con App ID.

Existen muchos casos de ejemplo en los que es necesario un flujo de autenticación distinto:

  • Proveedores de identidad internos y de propiedad
  • Proveedores de identidad de terceros
  • Flujos de autenticación complicados que pueden incluir mecanismos de multifactores de propiedad

Ocasionalmente, un proveedor heredado puede utilizar su propio protocolo de autenticación personalizado. Puesto que el flujo de identidad personalizado desacopla completamente la autenticación de la autorización, puede adoptar cualquier mecanismo de autenticación de su elección y proporcionar la información de autenticación resultante a App ID. Todo ello sin exponer las credenciales de usuario.

Técnicamente, ¿cómo funciona este flujo?

El flujo de trabajo de identidad personalizado se basa en el tipo de concesión de extensión JWT-Bearer que se define en Assertion Framework for OAuth 2.0 Authorization Grants [RFC7521 ]. Para poder intercambiar información de usuario para las señales de App ID, la arquitectura de autenticación crea una relación de confianza con App ID utilizando un par de claves RSA asimétricas. Una vez se haya establecido la confianza, puede utilizar el tipo de otorgamiento JWT-Bearer para intercambiar información de usuario verificada en un JWT firmado para las señales App ID.

¿Qué aspecto tiene el flujo?

Al igual que todos los flujos de autenticación, la identidad personalizada requiere que la aplicación sea capaz de establecer un grado de confianza con App ID para garantizar la integridad de la información de usuario del proveedor de identidad. La identidad personalizada utiliza un par de claves públicas y privadas de RSA asimétricas para establecer la relación de confianza. En función de los requisitos arquitectónicos, la identidad personalizada admite dos modelos de confianza que difieren únicamente en la ubicación del almacenamiento y el uso de la clave privada.

Flujo de solicitud de autenticación
flujos de solicitud de
personalizada*

Flujo firmado por el proveedor de identidad
  1. Proveedor de identidad firmado
Al igual que con los flujos OAuth 2.0 tradicionales, el modelo de confianza más seguro crea una relación entre su proveedor de identidad y el servidor de autorización; en este caso es directamente App ID. En este modelo, el proveedor de identidad es responsable de almacenar la clave privada y de firmar las aserciones de JWT. Cuando se pasan a App ID, dichas aserciones se validan con la clave pública coincidente, lo que garantiza que la información de usuario de su proveedor de identidad no se haya alterado malintencionadamente durante el transporte.
Flujo firmado por la aplicación
  1. Aplicación firmada
De forma alternativa, puede basar su modelo en la relación entre la app y App ID. En este flujo de trabajo, la clave privada se almacena en la aplicación del lado del servidor. Tras una autenticación correcta, la app es responsable de convertir la respuesta de los proveedores de identidad en JWT y de firmarla con la clave privada antes de que la app envíe la señal a App ID. Puesto que el proveedor de identidad no tiene ninguna relación con App ID, la arquitectura crea un modelo de confianza más débil. Si bien App ID puede confiar en la información enviada por la aplicación del lado del servidor, no puede estar seguro de que los datos son los primeros que envió el proveedor de identidad.

Generación de una señal web de JSON

Puede convertir sus datos de usuario verificados en un JWT de identidad personalizado generando un token web JSON. La señal debe estar firmada con la clave privada que coincide con la clave pública preconfigurada. Para obtener una lista de bibliotecas de firma de tokens, consulte https://jwt.io/.

Formato JWT de ejemplo

{
  // Header
  "alg": "RS256",
  "typ": "JOSE",
  // Payload
  // Required
  "iss": "String", // Should reference your identity provider
  "aud": "String", // Must be the OAuth server URL name
  "exp": "Int",    // Should be a value with a short lifespan
  "sub": "String", // Must be the unique user ID provided by your identity provider

  // Normalized claims (optional)
  "name": "String",
  "email": "String",
  "locale": "String",
  "picture": "String",
  "gender": "String",

  // Custom Scopes to add to access token (optional)
  scope="custom_scope1 custom_scope2"

  // Other custom claims (optional)
  role="admin"
}
Campos JWS
Campo Descripción
iss Debería contener una referencia al proveedor de identidad.
aud El URL de servidor OAuth. Formato: https://<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>.
exp El período de tiempo durante el que la señal es válida. Por razones de seguridad, debe tener un período de vida corta y ser específico.
sub El ID de usuario exclusivo que proporciona el proveedor de identidad.
Reclamaciones normalizadas Todas las reclamaciones normalizadas se proporcionan en la señal de identidad que se devuelve como respuesta a esta solicitud. Se pueden encontrar más reclamaciones personalizadas utilizando el punto final /userinfo.
Ámbito

De forma predeterminada, todas las señales de App ID contienen un grupo de ámbito preestablecidos. Puede solicitar ámbitos adicionales realizando una de las acciones siguientes:

  • Especifique el ámbito en el campo de ámbito de la señal JWS.
  • Especifique el ámbito mediante el parámetro de ámbito de formulario URL de la solicitud /token.

Recuperación de señales de App ID

Para crear el puente entre el proveedor personalizado y App ID debe tener señales de App ID. Para obtener tokens de servicio, intercambie su información de usuario verificada utilizando el punto final /token.

Post /token
Content-Type: application/x-www-from-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
assertion=<payload>
scope="<spaceSeparatedScopeArray>"
Variables necesarias de la solicitud
Variable Descripción
Content-type applications/x-www-from-urlencoded
grant_type urn:ietf:params:oauth:grant-type:jwt-bearer
assertion A JWS payload string.
alcance Una lista separada por espacios en blanco de los ámbitos personalizados.