¿Cómo puedo solucionar los errores «401 No autorizado» desde un punto de conexión de la API de REST de API Gateway después de configurar un grupo de usuarios de Amazon Cognito?
He configurado mi grupo de usuarios de Amazon Cognito como autorizador COGNITO_USER_POOLS en mi API de REST de Amazon API Gateway. Y ahora recibo errores «401 No autorizado» en la respuesta de la API. ¿Cómo soluciono estos errores?
Resolución
Nota: API Gateway puede devolver errores 401 No autorizado por diversos motivos. El siguiente procedimiento muestra cómo solucionar los errores 401 relacionados únicamente con los autorizadores COGNITO_USER_POOLS.
Comprobar la configuración del autorizador en el método de la API
1. En la consola de API Gateway, en el panel de las API, elija el nombre de su API.
2. En el panel de navegación, seleccione Autorizadores en su API.
3. Revise la configuración del autorizador y confirme que se cumpla lo siguiente:
El ID del grupo de usuarios coincide con el emisor del token.
La API está desplegada.
El autorizador funciona en modo de prueba.
Para obtener más información, consulte Integración de una API de REST con un grupo de usuarios de Amazon Cognito.
Nota: Si no puede invocar su API después de confirmar la configuración del autorizador en el método de la API, compruebe la validez del token de seguridad.
Comprobar la validez del token de seguridad
Cuando compruebe la validez del token de seguridad, confirme que se cumpla lo siguiente:
- El token de seguridad no ha caducado.
- 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, puede decodificar los tokens. Si los tokens no son válidos, asegúrese de que no se hayan añadido espacios en los tokens al pasarlos al encabezado de la solicitud.
Importante: Si no hay ámbitos adicionales configurados en el método de API Gateway, asegúrese de utilizar un token de ID válido. Si se configuran ámbitos adicionales en el método de API Gateway, confirme que está utilizando un token de acceso válido. Para obtener más información, consulte Integración de una API de REST con un grupo de usuarios de Amazon Cognito y Utilizar los ámbitos personalizados de Amazon Cognito en API Gateway.
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" }
Tenga 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:
- Asegúrese de que el token que está utilizando coincida con el grupo de usuarios configurado en el método API Gateway. Si sigue sin poder invocar la API, confirme que esté utilizando el encabezado de autorización correctamente.
- Si sigue recibiendo errores 401, asegúrese de que sus políticas de recursos no bloquean la solicitud.
Si usa Postman para invocar la API
Utilice el modo de autorización de OAuth 2.0 para usar los tokens de Amazon Cognito directamente. Al configurar el modo de autorización de OAuth 2.0, confirme que se cumple lo siguiente:
- El tipo de concesión es el código de autorización o la autorización implícita, según la configuración del cliente de aplicaciones del grupo de usuarios.
- 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
Importante: Reemplace mydomain por el nombre de dominio que usa para configurar su grupo de usuarios. Asegúrese de introducir la región de AWS correcta en la que está alojada su API.
- El ID de cliente es el ID de cliente de aplicaciones del grupo de usuarios.
Nota: Si un secreto de cliente está asociado al cliente de aplicaciones del grupo de usuarios, asegúrese de especificar el secreto del cliente en la pestaña de Autorización del campo Secreto del cliente. Si no hay ningún secreto de cliente asociado al cliente de aplicaciones del grupo de usuarios, deje el campo Secreto del cliente en blanco. - El ámbito está configurado como openid.
Nota: El ámbito openid también debe estar permitido en el cliente de aplicaciones del grupo de usuarios. - Se introduce el punto de conexión correcto del token del grupo de usuarios de Amazon Cognito para el flujo del código de autorización.
Ejemplo de punto de conexión del token del grupo de usuarios de Amazon Cognito
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Nota: Es posible que Postman no pase el tipo de contenido requerido al punto de conexión del token, lo que puede provocar un error 405. Sin embargo, no recibirá el error 504 cuando utilice el flujo implícito.
Información relacionada
¿Cómo puedo decodificar y verificar la firma de un token web JSON de Amazon Cognito?
Controlar el acceso a una API de REST mediante grupos de usuarios de Amazon Cognito como autorizador
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 7 meses
- OFICIAL DE AWSActualizada hace 2 años