¿Cómo configuro un grupo de usuarios de Amazon Cognito como autorizador en una API de REST de API Gateway?

9 minutos de lectura
0

Quiero configurar un grupo de usuarios de Amazon Cognito como autorizador en mi API de REST de Amazon API Gateway.

Descripción breve

Hay dos formas de configurar un grupo de usuarios de Amazon Cognito como autorizador en una API de REST de API Gateway:

Puede utilizar tokens de ID o tokens de acceso para la autorización. Los tokens de acceso pueden autorizar el acceso a las API de API Gateway con ámbitos personalizados en Amazon Cognito. Un autorizador de Lambda puede validar las afirmaciones en los tokens de ID y los tokens de acceso emitidos por Amazon Cognito.

Para obtener más información, consulte estos temas:

Resolución

El siguiente procedimiento muestra cómo crear un autorizador de COGNITO_USER_POOLS. El ejemplo asume que ya ha creado dos cosas:

Creación de un autorizador de COGNITO_USER_POOLS

Para obtener más información, consulte Integración de una API de REST con un grupo de usuarios de Amazon Cognito. Siga las instrucciones de la sección Para crear un autorizador de COGNITO_USER_POOLS mediante la consola de API Gateway.

Probar el nuevo autorizador de COGNITO_USER_POOLS

Tras crear el autorizador de COGNITO_USER_POOLS, haga lo siguiente:

  1. En la consola de API Gateway, pulse el botón Prueba situado debajo del nuevo autorizador.

  2. En la ventana Prueba, para la Autorización, introduzca un token de ID del nuevo grupo de usuarios de Amazon Cognito.

  3. Elija Prueba.

Nota: Si el token de ID es correcto, la prueba devuelve un código de respuesta 200. Un token de ID incorrecto devuelve un código de respuesta 401.

Configuración del autorizador de COGNITO_USER_POOLS en un método de API

Para obtener más información, consulte Integración de una API de REST con un grupo de usuarios de Amazon Cognito. Siga las instrucciones de la sección Para configurar un autorizador de COGNITO_USER_POOLS en los métodos.

Obtención de los tokens de autorización

Hay cuatro formas de obtener los tokens de autorización:

Nota: Configure la interfaz de usuario alojada de Amazon Cognito con una concesión de código de autorización para que su aplicación pueda intercambiar el código por un punto de conexión de token.

Si utiliza un tipo de concesión implícita, puede obtener la concesión desde la URL de devolución de llamada. La URL de devolución de llamada se adjunta a los parámetros del token de acceso y token de ID para el flujo implícito. Asegúrese de utilizar el tipo de token correcto.

Para obtener los tokens de autorización mediante la interfaz de usuario alojada de Amazon Cognito

Para utilizar el flujo de concesión del código de autorización, haga lo siguiente:

Nota: El parámetro del tipo de respuesta debe ser «code» cuando se utilice el flujo de concesión del código de autorización.

  1. Envíe una solicitud GET para la concesión del código de autorización:

Importante: Sustituya example_domain por el nombre de dominio de su grupo de usuarios. Sustituya example_app_client_id por la ID de cliente de la aplicación de su grupo de usuarios. Sustituya example_callback_url por la URL de devolución de llamada.

https://example_domain/oauth2/authorize?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url

Nota: Incluya el parámetro identity_provider para que el punto de conexión lo redirija al proveedor de identidades federadas. Si el cliente de la aplicación está configurado solo para grupos de usuarios de Amazon Cognito, el siguiente punto de conexión redirige al punto de conexión /login:

https://example_domain/login?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url
  1. Inicie sesión en su grupo de usuarios o en su proveedor de identidades federadas. La interfaz de usuario redirige a la URL especificada en la devolución de llamada del cliente de la aplicación.

Importante: La URL de redirección incluye el código de autorización que debe intercambiarse con el punto de conexión de token para obtener los tokens válidos.

  1. Envíe una solicitud POST al punto de conexión /oauth2/token para intercambiar un código de autorización por tokens. Para obtener más información, consulte Punto de conexión de token.

Ejemplo de solicitud POST para intercambiar un código de autorización por tokens

Nota: La solicitud POST de ejemplo usa el siguiente punto de conexión /oauth2/token: https://example_domain.auth.us-east-1.amazoncognito.com/oauth2/token&

Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZXhhbXBsZTEyMzQ1Njc4OTA6enl4OTh3N3l2dHNycTY1NHBvMzIx
grant_type=authorization_code&
client_id=example1234567890&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect

Ejemplo de respuesta a una solicitud POST

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token":"abCde1example",
  "id_token":"abCde2example",
  "refresh_token":"abCde3example",
  "token_type":"Bearer",
  "expires_in":3600
}

Para usar el flujo de concesión implícita, haga lo siguiente:

**Nota:**El parámetro del tipo de respuesta debe ser «token» cuando se usa el flujo de concesión implícita.

  1. Envíe una solicitud GET para una concesión implícita:

Importante: Sustituya example_domain por el nombre de dominio de su grupo de usuarios. Sustituya example_app_client_id por la ID de cliente de la aplicación de su grupo de usuarios. Sustituya example_callback_url por la URL de devolución de llamada.

https://example_domain/oauth2/authorize?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url

Nota: Incluya el parámetro identity_provider para que el punto de conexión lo redirija al proveedor de identidades federadas. Si el cliente de la aplicación está configurado solo para grupos de usuarios de Amazon Cognito, el siguiente punto de conexión redirige al punto de conexión /login:

https://example_domain/login?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url
  1. Inicie sesión en su grupo de usuarios con el nombre de usuario y la contraseña de un usuario existente, o cree un usuario nuevo para iniciar sesión. La interfaz de usuario redirige a la URL especificada en la devolución de llamada del cliente de la aplicación.

Nota: La URL de redirección incluye el token de ID y el token de acceso.

Ejemplo de URL de redirección

https://www.example.com/#id_token=123456789idtoken123456789&access_token=123456789accesstoken123456789expires_in=3600&token_type=Bearer

Para obtener los tokens de autorización mediante la AWS CLI

Nota: Si recibe errores al ejecutar los comandos de la AWS CLI, asegúrese de usar la versión más reciente de la AWS CLI.

Ejecute el siguiente comando de AWS CLI initiate-auth para obtener los tokens de autorización:

Importante: Sustituya example_user por su nombre de usuario, example_password por su contraseña y example_app_client_id por su ID de cliente de la aplicación.

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user,PASSWORD=example_password --client_id example_app_client_id

Ejemplo de respuesta del comando initiate-auth de AWS CLI

{
  "AuthenticationResult": {
    "AccessToken": "abCde1example",
    "IdToken": "abCde2example",
    "RefreshToken": "abCde3example",
    "TokenType": "Bearer",
    "ExpiresIn": 3600
  },
  "ChallengeParameters": {}
}

Para obtener los tokens de autorización mediante uno de los AWS SDK

Para obtener más información, consulte Integración de Amazon Cognito en aplicaciones web y móviles.

Para obtener los tokens de autorización mediante Postman

Use el modo de autorización OAuth 2.0 en Postman para obtener los tokens de autorización. Para obtener más información, consulte ¿POr qué obtengo errores 401 de API Gateway después de crear un autorizador de Lambda?

Configure los ámbitos personalizados de OAuth 2.0 en los grupos de usuarios de Amazon Cognito y verifique los ámbitos en API Gateway

Un ámbito proporciona un nivel de acceso que una aplicación puede solicitar a un recurso. Amazon Cognito cuenta con ámbitos de OAuth integrados que se pueden configurar para permitir la asociación de un cliente de aplicaciones a un grupo de usuarios. Para obtener más información sobre los ámbitos integrados en Amazon Cognito, consulte Terminología de la configuración del cliente de la aplicación.

Los ámbitos personalizados se pueden asociar a los servidores de recursos de OAuth 2.0. Para obtener más información sobre los servidores de recursos, consulte Definir servidores de recursos para el grupo de usuarios.

Cuando usa Amazon Cognito con API Gateway, el autorizador de Amazon Cognito autentica la solicitud y protege los recursos. El uso de ámbitos personalizados con Amazon Cognito y API Gateway le ayuda a proporcionar niveles diferenciados de acceso a sus recursos de API. También tiene más control a la hora de exponer los recursos para obtener los ámbitos de los tokens de acceso.

Configuración de un servidor de recursos y los ámbitos personalizados de OAuth 2.0 en un grupo de usuarios

  1. Defina el servidor de recursos y los ámbitos personalizados para su grupo de usuarios.
    Para el identificador del servidor de recursos, proporcione el punto de conexión HTTPS de API Gateway donde se encuentran sus recursos.

  2. Si es necesario, configure un cliente de aplicación para el grupo de usuarios y, a continuación, agregue los ámbitos personalizados en la configuración del cliente de aplicación.

Nota: El nombre de un ámbito personalizado tiene el formato resourceServerIdentifier/scopeName

Cuando una aplicación de cliente solicita un ámbito personalizado en un flujo de OAuth 2.0, la aplicación de cliente debe solicitar el identificador completo del ámbito. Por ejemplo, si el identificador del servidor de recursos es https://myresourceserver.example.com y el nombre del ámbito es resources.read, la aplicación de cliente debe solicitar https://myresourceserver.example.com/resources.read en la versión ejecutable.

Verificación de los ámbitos personalizados de OAuth 2.0 en API Gateway

  1. Integre una API de REST con un grupo de usuarios de Amazon Cognito.

  2. En la consola de API Gateway, elija una API de REST.

  3. En el panel Recursos, elija un nombre para el método.

  4. Elija la configuración Solicitud de método.

  5. En la lista desplegable Autorización, elija Autorizador de Cognito. Esto agrega automáticamente un campo nuevo denominado Ámbitos de OAuth.

  6. En el campo Ámbitos de OAuth, introduzca el identificador completo del ámbito personalizado en el formato mencionado anteriormente. Por ejemplo, https://myresourceserver.example.com/resources.read.

  7. Guarde e implemente la API.

Probar la configuración con Postman o CURL

  1. Obtenga el token de acceso del servidor de autorización de Amazon Cognito mediante uno de los flujos de OAuth 2.0 definidos para el cliente.

  2. Envíe el token de acceso recibido que recibió como encabezado de autorización en una solicitud a API Gateway.

  3. Si todo funciona correctamente y API Gateway valida y verifica el token de acceso y el ámbito personalizado, obtendrá la respuesta 200 OK.

Información relacionada

Asegure el acceso a API con Amazon Cognito Federated Identities, grupos de usuarios de Amazon y Amazon API Gateway

¿Cómo puedo decodificar y verificar la firma de un token web JSON de Amazon Cognito?

Control del acceso a una API de REST con grupos de usuarios de Amazon Cognito como autorizador

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años