SAMLinicio de sesión en grupos de usuarios de Amazon Cognito - Amazon Cognito

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

SAMLinicio de sesión en grupos de usuarios de Amazon Cognito

Amazon Cognito admite el inicio de sesión único () iniciado por el proveedor de servicios (iniciado por el SP) y el iniciado por el IdP. SSO SSO Como práctica de seguridad recomendada, implemente el método iniciado por SP en su grupo de usuarios. SSO En la sección 5.1.2 de la descripción técnica de la SAML versión 2.0 se describe la iniciativa SP. SSO Amazon Cognito es el proveedor de identidad (IdP) para la aplicación. La aplicación es el proveedor de servicios (SP) que recupera tokens para usuarios autenticados. No obstante, cuando utiliza un IdP externo para autenticar usuarios, Amazon Cognito es el SP. Cuando los usuarios de la SAML versión 2.0 se autentican con un flujo iniciado por un SP, siempre deben realizar primero una solicitud a Amazon Cognito y redirigirlos al IdP para su autenticación.

En algunos casos de uso empresariales, el acceso a las aplicaciones internas comienza en un marcador de un panel alojado por el IdP de la empresa. Cuando un usuario selecciona un marcador, el iDP genera SAML una respuesta y la envía al SP para autenticar al usuario con la aplicación.

Puede configurar un SAML IdP en su grupo de usuarios para que sea compatible con los iniciados por el IdP. SSO Cuando admite la autenticación iniciada por un IdP, Amazon Cognito no puede comprobar si ha solicitado SAML la respuesta que recibe porque Amazon Cognito no inicia la autenticación con una solicitud. SAML En SP InitiatedSSO, Amazon Cognito establece parámetros de estado que validan SAML una respuesta con respecto a la solicitud original. Con el inicio de sesión iniciado por SP, también puede evitar la falsificación de solicitudes entre sitios (). CSRF

Uso del SAML inicio de sesión iniciado por SP

Como práctica recomendada, implemente el inicio de sesión service-provider-initiated (iniciado por SP) en su grupo de usuarios. Amazon Cognito inicia la sesión del usuario y lo redirige a su IdP. Con este método, tiene el mayor control sobre quién presenta las solicitudes de inicio de sesión. También puedes permitir el inicio de sesión iniciado por un IdP en determinadas condiciones.

El siguiente proceso muestra cómo los usuarios completan el inicio de sesión iniciado por SP en su grupo de usuarios a través de un proveedor. SAML

Diagrama de flujo de autenticación del inicio de sesión iniciado por Amazon Cognito SPSAML.
  1. El usuario introduce su dirección de correo electrónico en una página de inicio de sesión. Para determinar la redirección del usuario a su IdP, puedes recopilar su dirección de correo electrónico en una aplicación personalizada o invocar la interfaz de usuario alojada en la vista web. Puedes configurar la interfaz de usuario alojada para que muestre una lista IdPs o solo pida una dirección de correo electrónico.

  2. La aplicación invoca el punto final de redireccionamiento del grupo de usuarios y solicita una sesión con el ID de cliente que corresponde a la aplicación y el ID de IdP que corresponde al usuario.

  3. Amazon Cognito redirige al usuario al IdP con una SAML solicitud, firmada opcionalmente, en un elemento. AuthnRequest

  4. El IdP autentica al usuario de forma interactiva o con una sesión recordada en una cookie del navegador.

  5. El IdP redirige al usuario al punto final de SAML respuesta del grupo de usuarios con la afirmación cifrada opcionalmente SAML en su carga útil. POST

    nota

    Amazon Cognito cancela las sesiones que no reciben respuesta en un plazo de 5 minutos y redirige al usuario a la interfaz de usuario alojada. Cuando su usuario experimente este resultado, recibirá un Something went wrong mensaje de error.

  6. Tras comprobar la SAML afirmación y asignar los atributos del usuario a partir de las afirmaciones de la respuesta, Amazon Cognito crea o actualiza internamente el perfil del usuario en el grupo de usuarios. Por lo general, su grupo de usuarios devuelve un código de autorización a la sesión del navegador del usuario.

  7. El usuario presenta su código de autorización en la aplicación, que lo intercambia por tokens JSON web (JWTs).

  8. Tu aplicación acepta y procesa el token de identificación de tu usuario como autenticación, genera solicitudes autorizadas a los recursos con su token de acceso y almacena su token de actualización.

Cuando un usuario se autentica y recibe una concesión de código de autorización, el grupo de usuarios devuelve los identificadores de identificación, acceso y actualización. El token de ID es un objeto de autenticación para la gestión de identidades OIDC basada en datos. El token de acceso es un objeto de autorización con un alcance OAuth2.0. El token de actualización es un objeto que genera nuevos identificadores y identificadores de acceso cuando los tokens actuales del usuario han caducado. Puede configurar la duración de los tokens de los usuarios en el cliente de la aplicación de su grupo de usuarios.

También puede elegir la duración de los tokens de actualización. Cuando el token de actualización de un usuario caduque, este debe volver a iniciar sesión. Si se autenticaron a través de un SAML IdP, la duración de la sesión de sus usuarios se establece en función de la caducidad de sus tokens, no de la caducidad de la sesión con su IdP. Tu aplicación debe almacenar el token de actualización de cada usuario y renovar su sesión cuando caduque. La interfaz de usuario alojada mantiene las sesiones de los usuarios en una cookie del navegador que es válida durante 1 hora.

Uso del inicio de sesión iniciado por el IdP SAML

Al configurar su proveedor de identidad para el inicio de sesión SAML 2.0 iniciado por el IdP, puede presentar SAML afirmaciones en el saml2/idpresponse punto final del dominio de su grupo de usuarios sin necesidad de iniciar la sesión en el. Autorizar punto de conexión Un grupo de usuarios con esta configuración acepta SAML las aserciones iniciadas por el IdP de un proveedor de identidad externo del grupo de usuarios que admite el cliente de la aplicación solicitada. Los siguientes pasos describen el proceso general para configurar e iniciar sesión con un proveedor SAML 2.0 iniciado por el IdP.

  1. Cree o designe un grupo de usuarios y un cliente de aplicaciones.

  2. Cree un IdP SAML 2.0 en su grupo de usuarios.

  3. Configure su IdP para que admita el inicio del IdP. SAMLIdp-Initiated introduce consideraciones de seguridad a las que otros SSO proveedores no están sujetos. Por este motivo, no puedes añadir ningún cliente de aplicaciones que no sea SAML IdPs, incluido el propio grupo de usuarios, a ningún cliente de aplicaciones que utilice un SAML proveedor con inicio de sesión iniciado por el IdP.

  4. Asocie el SAML proveedor iniciado por el IdP a un cliente de aplicaciones de su grupo de usuarios.

  5. Dirija al usuario a la página de inicio de sesión de su SAML IDP y SAML recupere una afirmación.

  6. Dirija al usuario al saml2/idpresponse punto final de su grupo de usuarios con su afirmación. SAML

  7. Reciba tokens JSON web (JWTs).

Para aceptar SAML afirmaciones no solicitadas en tu grupo de usuarios, debes tener en cuenta su efecto en la seguridad de tu aplicación. Es probable que se produzcan CSRF intentos y suplantación de identidad cuando aceptas solicitudes iniciadas por un IdP. Aunque su grupo de usuarios no puede verificar una sesión de inicio de sesión iniciada por un IdP, Amazon Cognito valida los parámetros y las afirmaciones de su solicitud. SAML

Además, su SAML afirmación no debe contener ninguna InResponseTo reclamación y debe haberse emitido en los 6 minutos anteriores.

Debe enviar las solicitudes iniciadas por IDP SAML a su. /saml2/idpresponse En el caso de las solicitudes de autorización de la interfaz de usuario alojada e iniciadas por el SP, debes proporcionar parámetros que identifiquen el cliente de la aplicación solicitada, los alcances, la redirección URI y otros detalles como parámetros de cadena de consulta en las solicitudes. HTTP GET Sin embargo, en el caso de SAML las afirmaciones iniciadas por el IdP, los detalles de la solicitud deben formatearse como un RelayState parámetro en el cuerpo de la solicitud. HTTP POST El cuerpo de la solicitud también debe contener tu SAML afirmación como parámetro. SAMLResponse

El siguiente es un ejemplo de solicitud para un proveedor iniciado por un IdPSAML.

POST /saml2/idpresponse HTTP/1.1 User-Agent: USER_AGENT Accept: */* Host: example.auth.us-east-1.amazoncognito.com Content-Type: application/x-www-form-urlencoded SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone HTTP/1.1 302 Found Date: Wed, 06 Dec 2023 00:15:29 GMT Content-Length: 0 x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb Location: https://www.example.com?code=[Authorization code]
AWS Management Console
Para configurar un IdP para un IdP iniciado SAML
  1. Cree un grupo de usuarios, un cliente de aplicaciones y SAML un proveedor de identidades.

  2. Desvincula todos los proveedores de redes sociales y de OIDC identidad de tu cliente de aplicaciones, si hay alguno asociado.

  3. Ve a la pestaña Experiencia de inicio de sesión de tu grupo de usuarios.

  4. En Iniciar sesión con un proveedor de identidad federado, edite o añada un proveedor. SAML

  5. En Inicio de SAMLsesión iniciado por el IdP, elija Aceptar aserciones iniciadas por el SP e iniciadas por el IdP. SAML

  6. Elija Guardar cambios.

API/CLI

Para configurar un IdP para un IdP iniciado SAML

Configure IdP SAML Initiated con el IDPInit parámetro de una solicitud CreateIdentityProvideror UpdateIdentityProviderAPI. El siguiente es un ejemplo ProviderDetails de un IdP que admite IdP Initiated. SAML

"ProviderDetails": { "MetadataURL" : "https://myidp.example.com/saml/metadata", "IDPSignout" : "true", "RequestSigningAlgorithm" : "rsa-sha256", "EncryptedResponses" : "true", "IDPInit" : "true" }