Saltar al contenido

¿Cómo puedo solucionar los errores «401 Unauthorized» desde un punto de enlace de la API de REST de API Gateway después de configurar un grupo de usuarios de Amazon Cognito?

5 minutos de lectura
0

He configurado mi grupo de usuarios de Amazon Cognito como autorizador COGNITO_USER_POOLS en mi API de REST de Amazon API Gateway. Recibo errores «401 Unauthorized» en la respuesta de la API.

Solución

Nota: API Gateway puede devolver errores 401 No autorizado por diversos motivos. El siguiente procedimiento muestra cómo solucionar únicamente los errores 401 relacionados con los autorizadores COGNITO_USER_POOLS.

Comprobar la configuración del autorizador en el método de la API

Sigue estos pasos:

  1. Abre la consola de API Gateway.
  2. En el panel de navegación, selecciona API y, a continuación, elige tu API.
  3. En el panel de navegación, en tu API, selecciona Autorizadores.
  4. Revisa la configuración del autorizador y confirma que se cumpla lo siguiente:
    El ID del grupo de usuarios coincide con el emisor del token.
    Has desplegado la API.
    El autorizador funciona en modo de prueba para los tokens de ID.
    Nota: No puedes usar esta característica para probar los tokens de acceso.

Para obtener más información, consulta Integración de una API de REST con un grupo de usuarios de Amazon Cognito.

Nota: Si no puedes invocar tu API después de confirmar la configuración del autorizador, comprueba la validez del token de seguridad.

Comprobación de la validez del token de seguridad

Cuando compruebes la validez del token de seguridad, confirma que se cumpla lo siguiente:

  • El token de seguridad no ha vencido.
  • El emisor del token de seguridad coincide con el grupo de usuarios de Amazon Cognito configurado en la API.
  • Los valores de cadena del token de ID y del token de acceso son válidos.
    Nota: Si los valores de la cadena son válidos, puedes decodificar los tokens. Si los tokens no son válidos, revisa tus tokens. Asegúrate de que los tokens no tengan espacios adicionales para pasar por el encabezado de la solicitud.

Importante: Si no has configurado ningún ámbito en el método de API Gateway, asegúrate de usar un token de ID válido. Si configuras ámbitos adicionales en el método de API Gateway, asegúrate de usar un token de acceso válido. Para más información, consulta ¿Cómo autorizo el acceso a las API de API Gateway con ámbitos personalizados en Amazon Cognito?

Ejemplo de carga útil de un token de seguridad:

Id token payload: {
 "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
 "aud": "xxxxxxxxxxxxexample",
 "email_verified": true,
 "token_use": "id",
 "auth_time": 1500009400,
 "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
 "cognito:username": "janedoe",
 "exp": 1500013000,
 "given_name": "Jane",
 "iat": 1500009400,
 "email": "janedoe@example.com"
 }
Access token payload:
{
    "auth_time": 1500009400,
    "exp": 1500013000,
    "iat": 1500009400,
    "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
    "scope": "aws.cognito.signin.user.admin",
    "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "token_use": "access",
    "username": "janedoe@example.com"
}

Ten en cuenta los siguientes nombres de reclamaciones en la carga útil del token de seguridad del ejemplo:

  • token_use indica el tipo de token (token de ID o de acceso).
  • exp indica el tiempo de caducidad del token.
    Nota: La reclamaciónexp se representa como segundos desde el Tiempo Unix (1970-01-01T0:0:0Z) hasta la fecha y la hora en que el token caduca en la hora universal coordinada (UTC).
  • auth_time indica cuándo se emitió el token.
  • iss indica el dominio del grupo de usuarios que emitió los tokens.

Importante: El token que utilices debe coincidir con el grupo de usuarios que configures en el método de API Gateway. Si no puedes invocar la API, confirma que utilizas correctamente el encabezado de autorización. Si recibes errores 401, asegúrate de que tus políticas de recursos no bloqueen la solicitud.

Si usas Postman para invocar la API

Para usar los tokens de Amazon Cognito directamente, utiliza el modo de autorización de OAuth 2.0. Para más información, consulta API authentication and authorization in Postman (Autenticación y autorización de API en Postman) en el sitio web de Postman.

Al configurar el modo de autorización de OAuth 2.0, confirma que se cumple lo siguiente:

  • La opción Tipo de concesión se establece en Código de autorización o Autorización implícita.
  • La URL de devolución de llamada coincide con la URL redirigida configurada en el cliente de aplicaciones del grupo de usuarios.
  • La URL de autenticación tiene el siguiente formato: https://mydomain.auth.us-east-1.amazoncognito.com/login
    Nota: Reemplaza mydomain por el nombre de dominio que usas para configurar tu grupo de usuarios. Asegúrate de introducir la región de AWS correcta en la que está alojada tu API.
  • El ID de cliente es el ID de cliente de aplicaciones del grupo de usuarios.
    Nota: Si asocias un secreto de cliente al cliente de aplicaciones del grupo de usuarios, especifica el secreto en la pestaña Autorización. Si no hay ningún secreto de cliente asociado al cliente de aplicaciones del grupo de usuarios, deja el campo Secreto del cliente en blanco.
  • El ámbito está configurado como Openid.
    Nota: Debes permitir el ámbito de Openid en el cliente de aplicaciones del grupo de usuarios.
  • En el flujo del código de autorización, introduce el punto de enlace correcto del token del grupo de usuarios de Amazon Cognito.
    Ejemplo de punto de enlace del token del grupo de usuarios de Amazon Cognito:
    https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token

Nota: Si el punto de enlace del token no admite el tipo de contenido, Postman no puede pasar el contenido necesario y se produce un error 405. Para evitar este problema, usa el flujo implícito. Para más información, consulta las concesiones de OAuth 2.0.

Información relacionada

Secure API access with Amazon Cognito federated identities, Amazon Cognito user pools, and API Gateway (Protección del acceso de API con identidades federadas y grupos de usuarios de Amazon Cognito y API Gateway)

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

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