Ajustes específicos de una aplicación en los clientes de aplicación - 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.

Ajustes específicos de una aplicación en los clientes de aplicación

Un cliente de la aplicación del grupo de usuarios es una configuración dentro de un grupo de usuarios que interactúa con una aplicación móvil o web que se autentica con Amazon Cognito. Los clientes de aplicaciones pueden llamar a las operaciones de la API autenticadas y no autenticadas y leer o modificar algunos o todos los atributos de los usuarios. La aplicación se debe identificar ante el cliente de la aplicación en las operaciones para registrar, iniciar sesión y gestionar las contraseñas olvidadas. Estas solicitudes de la API deben incluir la autoidentificación con un ID de cliente de la aplicación y la autorización con un secreto de cliente opcional. Debe asegurar los ID o secretos de cliente de aplicación para que solo las aplicaciones de cliente autorizadas puedan llamar a estas operaciones no autenticadas. Además, si configura la aplicación para firmar las solicitudes de la API autenticadas con credenciales de AWS, debe proteger las credenciales para que no las inspeccionen los usuarios.

Puede crear varias aplicaciones para un grupo de usuarios. Es posible que el cliente de una aplicación esté vinculado a la plataforma de código de una aplicación o a un inquilino independiente del grupo de usuarios. Por ejemplo, puede crear una aplicación para una aplicación del lado del servidor y una aplicación de Android diferente. Cada aplicación tiene su propio ID de cliente de aplicación.

Puede aplicar ajustes para las siguientes características del grupo de usuarios en el cliente de aplicación:

Tipos de cliente de aplicación

Al crear un cliente de aplicación en Amazon Cognito, puede rellenar previamente las opciones según los tipos de cliente estándar de OAuth cliente público y cliente confidencial. Configure un cliente confidencial con un secreto del cliente. Para obtener más información sobre los tipos de cliente, consulte IETF RFC 6749 #2.1.

Cliente público

Un cliente público se ejecuta en un navegador o en un dispositivo móvil. Debido a que no tiene recursos de confianza del lado del servidor, no incluye ningún secreto del cliente.

Cliente confidencial

Un cliente confidencial tiene recursos del lado del servidor a los que se puede confiar un secreto del cliente para operaciones de la API no autenticadas. Es posible que la aplicación se ejecute como un daemon o script de shell en el servidor backend.

Secreto del cliente

Un secreto de cliente, o una contraseña de cliente, es una cadena fija que la aplicación debe usar en todas las solicitudes API al cliente de la aplicación. El cliente de la aplicación debe tener un secreto del cliente para ejecutar concesiones de client_credentials. Para obtener más información, consulte IETF RFC 6749 #2.3.1.

No puede cambiar secretos del cliente después de crear una aplicación. Puede crear una nueva aplicación con un nuevo secreto si quiere rotar el secreto. También puede eliminar una aplicación para bloquear el acceso de aplicaciones que utilizan el ID de cliente de dicha aplicación.

nota

La consola de Amazon Cognito crea clientes de aplicación con secretos de cliente al seleccionar las opciones Aplicación web tradicional y Aplicación máquina a máquina en el tipo de aplicación. Elija una de estas opciones para generar un secreto de cliente o cree el cliente mediante programación con CreateUserPoolClient y ponga GenerateSecret en true.

Puede utilizar un cliente confidencial y un secreto del cliente con una aplicación pública. Utilice un proxy de Amazon CloudFront para agregar un SECRET_HASH en tránsito. Para obtener más información, consulte el tema sobre protección de los clientes públicos de Amazon Cognito mediante un proxy de Amazon CloudFront en el blog de AWS.

Tokens web JSON

Los clientes de aplicación de Amazon Cognito pueden emitir tokens web JSON (JWT) de los siguientes tipos.

Token de identidad (ID)

Una instrucción verificable de que su usuario está autenticado a partir de su grupo de usuarios. OpenID Connect (OIDC) ha agregado la especificación de token de ID a los estándares de token de acceso y actualización definidos por OAuth 2.0. El token de ID contiene información de identidad, como atributos de usuario, que su aplicación puede utilizar para crear un perfil de usuario y aprovisionar recursos. Para obtener más información, consulte Descripción del token de identidad (ID).

Token de acceso

Una instrucción verificable de los derechos de acceso de su usuario. El token de acceso contiene ámbitos, una característica de OIDC y OAuth 2.0. Su aplicación puede presentar ámbitos para recursos backend y demostrar que su grupo de usuarios autorizó a un usuario o máquina para acceder a datos de una API, o a sus propios datos de usuario. Un token de acceso con ámbitos personalizados, a menudo procedente de una concesión de credenciales de cliente M2M, autoriza el acceso a un servidor de recursos. Para obtener más información, consulte Descripción del token de acceso.

Token de actualización

Una instrucción cifrada de autenticación inicial que su aplicación puede presentar a su grupo de usuarios cuando caduquen sus tokens de usuario. Una solicitud de actualización de token devuelve tokens de acceso e ID nuevos y no caducados. Para obtener más información, consulte Tokens de actualización.

Puede establecer la caducidad de estos tokens para cada cliente de aplicación desde el menú Clientes de aplicación de su grupo de usuarios en la consola de Amazon Cognito.

Condiciones de uso de la aplicación

Los siguientes términos son propiedades disponibles de los clientes de aplicación en la consola de Amazon Cognito.

URL de devolución de llamada permitidas

Una URL de devolución de llamada indica adónde se redirigirá al usuario tras iniciar sesión correctamente. Elija al menos una URL de devolución de llamada. La URL de devolución de llamada debe:

  • Ser una URI absoluta.

  • Estar registrada previamente con un cliente.

  • No incluir un componente fragmento.

Consulte OAuth 2.0 - redirection endpoint (punto de enlace de redirección).

Amazon Cognito requiere HTTPS sobre HTTP, excepto para http://localhost solo con fines de prueba.

También se admiten las URL de devolución de llamada de aplicación como myapp://example.

URL de cierre de sesión permitidas

Una URL de cierre de sesión indica adónde se redirigirá al usuario después de cerrar la sesión.

Permisos de lectura y escritura de atributos

Su grupo de usuarios puede tener muchos clientes, cada uno con su propio cliente de aplicación e IdP. Puede configurar su cliente de aplicación para que tenga acceso de lectura y escritura solo a los atributos de usuario que sean relevantes para la aplicación. En casos como la autorización de máquina a máquina (M2M), no puede conceder acceso a ninguno de sus atributos de usuario.

Consideraciones para la configuración de los permisos de lectura y escritura de atributos
  • Cuando crea un cliente de aplicación y no personaliza los permisos de lectura y escritura de atributos, Amazon Cognito concede permisos de lectura y escritura a todos los atributos del grupo de usuarios.

  • Puede conceder acceso de escritura a atributos personalizados inmutables. El cliente de aplicación puede escribir valores en atributos inmutables cuando se crea o se registra un usuario. Después de esto, no puede escribir valores en ningún atributo personalizado inmutable para el usuario.

  • Los clientes de aplicaciones deben tener acceso de escritura a los atributos requeridos de su grupo de usuarios. La consola de Amazon Cognito establece automáticamente los atributos requeridos para que se puedan escribir.

  • No puede permitir que un cliente de aplicaciones tenga acceso de escritura a email_verified o phone_number_verified. Un administrador de grupo de usuarios puede modificar estos valores. Un usuario solo puede cambiar el valor de estos atributos mediante la verificación de atributos.

Flujos de autenticación

Los métodos que el cliente de su aplicación permite para el inicio de sesión. Su aplicación puede admitir la autenticación con nombre de usuario y contraseña, la OTP por correo electrónico y SMS, los autenticadores de clave de acceso, la autenticación personalizada con desencadenadores de Lambda y la actualización de tokens. Como práctica recomendada en materia de seguridad, utilice la autenticación SRP para la autenticación del nombre de usuario y la contraseña en las aplicaciones personalizadas.

Ámbitos personalizados

Un ámbito personalizado es el que se define para un servidor de recursos propio en Resource Servers (Recursos de servidores). El formato es recurso-servidor-identificador/ámbito. Consulte Ámbitos, M2M y servidores de recursos.

URI de redireccionamiento predeterminado

Sustituye el parámetro redirect_uri en las solicitudes de autenticación de usuarios con IdP de terceros. Configure este ajuste del cliente de aplicación con el parámetro DefaultRedirectURI de una solicitud de API CreateUserPoolClient o UpdateUserPoolClient. Esta URL también tiene que ser miembro de las CallbackURLs del cliente de aplicación. Amazon Cognito redirige las sesiones autenticadas a esta URL cuando:

  1. El cliente de aplicación tiene un proveedor de identidades asignado y varias URL de devolución de llamadas definidas. Su grupo de usuarios redirige las solicitudes de autenticación al servidor de autorización al URI de redireccionamiento predeterminado cuando las solicitudes no incluyen el parámetro redirect_uri.

  2. El cliente de aplicación tiene un proveedor de identidades asignado y una URL de devolución de llamada definida. En este escenario, no es necesario definir una URL de devolución de llamada predeterminada. Las solicitudes que no incluyen el parámetro redirect_uri se redirigen a la única URL de devolución de llamada disponible.

Proveedores de identidades

Puede elegir algunos o todos los proveedores de identidades (IdP) externos de su grupo de usuarios para autenticar a sus usuarios. Su cliente de aplicación también puede autenticar solo a los usuarios locales de su grupo de usuarios. Cuando agregue un IdP a su cliente de aplicación, podrá generar enlaces de autorización al IdP y mostrarlos en su página de inicio de sesión en el inicio de sesión administrado. Puede asignar varios IdP, pero debe asignar al menos uno. Para obtener más información sobre cómo utilizar IdP externos, consulte Inicio de sesión en el grupo de usuarios con proveedores de identidad externos.

Ámbitos de OpenID Connect

Elija uno o varios de los siguientes ámbitos OAuth para especificar los privilegios de acceso que se pueden solicitar para los tokens de acceso.

  • El ámbito de openid declara que desea recuperar un token de ID y un ID único de usuario. También solicita todos o algunos atributos de usuario, en función de los ámbitos adicionales de la solicitud. Amazon Cognito no devuelve un token de ID a menos que se solicite el ámbito openid. El ámbito de openid autoriza las reclamaciones de los token de ID estructurales, como la fecha de caducidad y el ID de clave y determina los atributos de usuario que se reciben en una respuesta de El punto de conexión userInfo.

    • Cuando openid es el único ámbito que solicita, Amazon Cognito rellena el token de ID con todos los atributos de usuario que el cliente de la aplicación actual pueda leer. La respuesta de userInfo a un token de acceso con este ámbito por sí solo devuelve todos los atributos del usuario.

    • Cuando solicita openid con otros ámbitos como phone, email o profile, el token de ID y userInfo devuelven el ID único del usuario y los atributos definidos por los ámbitos adicionales.

  • El ámbito phone concede acceso a las notificaciones phone_number y phone_number_verified. Este ámbito solo se puede solicitar con el ámbito openid.

  • El ámbito email concede acceso a las notificaciones email y email_verified. Este ámbito solo se puede solicitar con el ámbito openid.

  • El ámbito aws.cognito.signin.user.admin concede acceso a las operaciones de la API de grupos de usuarios de Amazon Cognito que requieren tokens de acceso, como UpdateUserAttributes y VerifyUserAttribute.

  • El ámbito profile concede acceso a todos los atributos de usuario que el cliente puede leer. Este ámbito solo se puede solicitar con el ámbito openid.

Para obtener más información sobre los ámbitos, consulte la lista de ámbitos de OIDC estándar.

Tipos de concesión de OAuth

Una concesión de OAuth es un método de autenticación que recupera tokens de grupo de usuarios. Amazon Cognito admite los siguientes tipos de concesiones. Para integrar estas concesiones de OAuth en su aplicación, debe agregar un dominio a su grupo de usuarios.

Concesión de código de autorización

La concesión de código de autorización genera un código que su aplicación puede intercambiar por tokens de grupo de usuarios con el Punto de conexión de token. Cuando intercambia un código de autorización, su aplicación recibe tokens de identificación, acceso y actualización. Este flujo de OAuth, al igual que la concesión implícita, se produce en los navegadores de sus usuarios. Una concesión de código de autorización es la concesión más segura que ofrece Amazon Cognito, porque los tokens no son visibles en las sesiones de sus usuarios. En su lugar, su aplicación genera la solicitud que devuelve los tokens y puede almacenarlos en caché en un almacenamiento protegido. Para obtener más información, consulte Código de autorización en IETF RFC 6749 #1.3.1

nota

Como práctica recomendada de seguridad en las aplicaciones de cliente público, active solo el flujo OAuth de concesión de código de autorización e implemente la clave de prueba para el intercambio de códigos (PKCE) a fin de restringir el intercambio de tokens. Con PKCE, un cliente solo puede intercambiar un código de autorización cuando ha proporcionado al punto de conexión del token el mismo secreto que se presentó en la solicitud de autenticación original. Para obtener más información sobre PKCE, consulte IETF RFC 7636.

Implicit grant (Concesión implícita)

La concesión implícita entrega un token de acceso y de ID, pero no de actualización, a la sesión del navegador de su usuario directamente desde el Autorizar punto de conexión. Una concesión implícita elimina el requisito de una solicitud independiente al punto de conexión de tokens, pero no es compatible con PKCE y no devuelve tokens de actualización. Esta concesión se adapta a los escenarios de prueba y a la arquitectura de las aplicaciones que no pueden completar las concesiones de códigos de autorización. Para obtener más información, consulte Concesión implícita en IETF RFC 6749 #1.3.2. Puede activar tanto la concesión de código de autorización como la concesión implícita en un cliente de aplicación y, a continuación, utilizar cada concesión según sea necesario.

Concesión de credenciales de cliente

La concesión de credenciales de cliente está destinada a las comunicaciones de máquina a máquina (M2M). Las concesiones de código de autorización e implícitas emiten tokens a los usuarios humanos autenticados. Las credenciales de cliente conceden una autorización basada en el alcance desde un sistema no interactivo a una API. Su aplicación puede solicitar las credenciales del cliente directamente desde el punto de conexión del token y recibir un token de acceso. Para obtener más información, consulte Credenciales de cliente en IETF RFC 6749 #1.3.4. Solo puede activar concesiones de credenciales de cliente en clientes de aplicación que tengan un secreto de cliente y que no admitan concesiones de código de autorización o implícitas.

nota

Debido a que no invoca el flujo de credenciales de cliente como usuario, esta concesión solo puede agregar ámbitos personalizados a los tokens de acceso. Un ámbito personalizado es el que se puede definir para un servidor de recursos propio. Los ámbitos predeterminados como openid y profile no se aplican a los usuarios no humanos.

Dado que los tokens de ID son una validación de los atributos de usuario, no son relevantes para la comunicación M2M, y un cliente de concesión de credenciales no los emite. Consulte Ámbitos, M2M y servidores de recursos.

Las concesiones de credenciales de cliente añaden costos a la factura de AWS. Para obtener más información, consulte Precios de Amazon Cognito.

Creación de un cliente de aplicación

Consola de administración de AWS
Para crear un cliente de aplicación (consola)
  1. Vaya a la consola de Amazon Cognito. Si se le solicita, escriba sus credenciales de AWS.

  2. Elija User Pools (Grupos de usuarios).

  3. Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios. Ambas opciones le piden que configure un cliente de aplicación con ajustes específicos de la aplicación.

  4. Elija un tipo de aplicación que refleje la arquitectura de la aplicación.

  5. Asigne un nombre a la aplicación con un identificador fácil de entender.

  6. Introduzca una URL de retorno.

  7. Elija Create app client (Crear cliente de aplicación). Puede cambiar las opciones avanzadas después de crear el cliente de aplicación.

  8. Amazon Cognito le devuelve a los detalles del cliente de aplicación. Para acceder al código de ejemplo de su aplicación, seleccione una plataforma en la pestaña Guía de configuración rápida.

AWS CLI
aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp
nota

Utilice el formato JSON para las direcciones URL de devolución de llamada y de cierre de sesión con el fin de evitar que la CLI las considere archivos de parámetros remotos:

--callback-urls "["https://example.com"]" --logout-urls "["https://example.com"]"

Consulte la referencia de comandos de la AWS CLI para obtener más información: create-user-pool-client.

Amazon Cognito user pools API

Genere una solicitud de la API CreateUserPoolClient. Debe especificar un valor para todos los parámetros que no desee establecer en un valor predeterminado.

Actualización de un cliente de aplicación de grupo de usuarios (AWS CLI y API de AWS)

En el AWS CLI, introduzca el comando siguiente:

aws cognito-idp update-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]" --supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"

Si el comando se ejecuta correctamente, la AWS CLI devuelve una confirmación:

{ "UserPoolClient": { "ClientId": "MyClientID", "SupportedIdentityProviders": [ "LoginWithAmazon", "MySAMLIdP" ], "CallbackURLs": [ "https://example.com" ], "AllowedOAuthScopes": [ "openid" ], "ClientName": "Example", "AllowedOAuthFlows": [ "implicit", "code" ], "RefreshTokenValidity": 30, "AuthSessionValidity": 3, "CreationDate": 1524628110.29, "AllowedOAuthFlowsUserPoolClient": true, "UserPoolId": "MyUserPoolID", "LastModifiedDate": 1530055177.553 } }

Consulte la referencia de comandos de la AWS CLI para obtener más información: update-user-pool-client.

API de AWS: UpdateUserPoolClient

Obtención de información sobre un cliente de aplicación de grupo de usuarios (AWS CLI y API de AWS)

aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID

Consulte la referencia de comandos de la AWS CLI para obtener más información: describe-user-pool-client.

API de AWS: DescribeUserPoolClient

Obtención de toda la información sobre los clientes de aplicación de un grupo de usuarios (AWS CLI y API de AWS)

aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3

Consulte la referencia de comandos de la AWS CLI para obtener más información: list-user-pool-clients.

API de AWS: ListUserPoolClients

Eliminación de un cliente de aplicación de grupo de usuarios (AWS CLI y API de AWS)

aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"

Consulte la referencia de comandos de la AWS CLI para obtener más información: delete-user-pool-client.

API de AWS: DeleteUserPoolClient