es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Integración de OIDC para Cognito

Estoy intentando utilizar Cognito User Pool para gestionar la autenticación de usuarios. He comenzado a integrar un proveedor OIDC para el inicio de sesión. En su mayoría, está funcionando, gracias a la ayuda de algunas publicaciones de SO y este post.

He llegado al punto en el que puedo vincular el usuario externo a mi usuario interno, pero cuando intento iniciar sesión, obtengo el error “Invalid Provider Name Username combination”. Me di cuenta de que esto se debe a que el ID de usuario del usuario externo tiene mayúsculas, pero el user_id vinculado en Cognito solo tiene minúsculas.

Ejemplo:
ID de Okta del usuario externo: abc123DEF
ID del usuario interno: (no importa)
ID del usuario externo en Cognito: okta_abc123def
Lista de identidades del usuario interno: [{“userId”:”abc123def”,”providerName”:”Okta”,”providerType”:”OIDC”,”issuer”:null,”primary”:false,”dateCreated”:1640383493683}]

¿Alguien ha tenido este problema antes y ha encontrado una solución? Podría resolverlo si supiera la ID externa del usuario antes de que se registre, ya que Cognito requiere que se llame al comando de vinculación antes de que se agregue el usuario externo, pero eso requeriría que ellos conocieran su ID interna y la proporcionaran, lo cual es demasiado engorroso.

EDIT:
Cuando llamo manualmente al comando de vinculación de usuarios con la ID de usuario distinguida por mayúsculas y luego intento iniciar sesión con el proveedor externo, obtengo un código como se esperaba, pero no se crea un usuario externo en Cognito (como debería) y el código no funciona para obtener tokens.

ACTUALIZACIÓN:
El problema era que no estaba llamando al endpoint de CIERRE DE SESIÓN para el dominio de Cognito, por lo que se estaba utilizando el usuario autenticado con la vinculación incorrecta en lugar de intentar volver a autenticarse a través de Cognito. Usando la sugerencia de un atributo personalizado (que mantiene la capitalización), pude utilizar la función lambda de pre-registro para vincular los usuarios y ya me funciona. Aún queda el problema de un error de que el usuario ya existe, pero puedo manejarlo en mi cliente como sugiere esta publicación.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para el error “Combinación de nombre de proveedor inválida y nombre de usuario” en Cognito User Pool con proveedor OIDC

    Resumen

    El usuario está teniendo un problema al usar Cognito User Pool para manejar la autenticación de usuarios. El usuario pudo vincular al usuario externo con el usuario interno, pero al intentar iniciar sesión, recibió el mensaje de error “Combinación de nombre de proveedor inválida y nombre de usuario”. El problema parece ser causado por el hecho de que el ID de usuario para el usuario externo tiene mayúsculas, mientras que el user_id vinculado en Cognito solo está en minúsculas.

    Solución

    La solución a este problema es utilizar un atributo personalizado en Cognito User Pool para almacenar las mayúsculas originales del ID de usuario externo. De esta manera, al vincular al usuario externo con el usuario interno, el atributo personalizado puede ser llenado con las mayúsculas originales. Luego, al iniciar sesión con el proveedor externo, se puede utilizar el atributo personalizado para recuperar las mayúsculas originales del ID de usuario externo y utilizarlo en el proceso de inicio de sesión.

    El atributo personalizado debe ser agregado al Cognito User Pool utilizando la Consola de Administración de AWS o la AWS CLI. Luego, se puede utilizar la función de pre inscripción lambda para llenar el atributo personalizado con las mayúsculas originales del ID de usuario externo. El comando de enlace de usuario se puede llamar utilizando las mayúsculas originales del ID de usuario externo, lo que asegurará que el user_id vinculado en Cognito tenga las mayúsculas correctas.

    Para evitar el error de que el usuario ya existe, se puede instruir al usuario a utilizar un ID de usuario externo diferente si ya lo ha utilizado antes.

    Finalmente, el usuario debe llamar al punto final de CIERRE DE SESIÓN en el dominio de Cognito para asegurarse de que el usuario se autentique nuevamente a través de Cognito en lugar de utilizar el usuario autenticado incorrectamente vinculado.

    Conclusión

    Al utilizar un atributo personalizado para almacenar las mayúsculas originales del ID de usuario externo y llamar al comando de enlace de usuario con las mayúsculas originales, el usuario puede vincular correctamente al usuario externo con el usuario interno e iniciar sesión sin errores.

Comments are closed.