¿Cómo soluciono los errores «Unauthorized» al hacer solicitudes de GraphQL en AWS AppSync?
Cuando hago solicitudes de GraphQL con AWS AppSync, recibo errores «Unauthorized».
Descripción corta
Hay dos tipos de errores no autorizados que se definen en el código de estado HTTP que se devuelve en la respuesta:
- 401 Unauthorized: AWS AppSync o el modo de autorización rechazan la solicitud porque faltan las credenciales o estas no son válidas.
- Respuesta 200 OKcon un error de tipo Unauthorized: la solicitud se rechaza debido a un problema del solucionador o más allá de este.
Para determinar la causa del error no autorizado, intenta reproducir el problema en un navegador web. A continuación, utiliza las herramientas de red del navegador para capturar los mensajes de solicitud y respuesta HTTP. Analiza los mensajes para determinar dónde se produjo el error. Para analizarlos sin conexión, guarda los mensajes en un archivo HTTP Archive (HAR).
Resolución
Respuesta 401 Unauthorized
Para obtener una respuesta 401 Unauthorized, comprueba la solicitud de red que envía la carga útil de GraphQL para confirmar lo siguiente:
- El encabezado Authorization o x-api-key está presente y contiene las credenciales correctas para el modo de autorización que requiere la operación o el campo. Si el encabezado no tiene las credenciales correctas, el modo de autorización rechaza la solicitud.
- Para los JSON Web Tokens (JWT), consulta el artículo Authorization header doesn't include the text "Bearer" en el sitio web de GitHub.
- El JWT proviene del grupo de usuarios de Amazon Cognito o del proveedor de OpenID Connect (OIDC) correcto.
- Las credenciales son válidas y no han vencido.
Respuesta 200 OK
Para obtener más información sobre las causas de los errores Unauthorized en una respuesta 200 OK, activa los registros de Amazon CloudWatch en la API de AWS AppSync. Se recomienda establecer el registro de campos en Todo e incluir contenido detallado.
Las solicitudes que reciben una respuesta 200 OK con el tipo de error Unauthorized y el mensaje No hay autorización para acceder a X en el tipo Y se rechazan mediante la lógica de las plantillas de asignación de resolución de Apache Velocity Template Language (VTL). Para resolver este problema, completa los siguientes pasos de solución de problemas para el modo de autorización que usas.
Autorización de Amazon Cognito y OIDC
Compara las notificaciones de token del usuario, como los grupos, email_verified y el ID o la audiencia del cliente, con las comprobaciones de autorización de las plantillas de asignación de resolución de VTL. Puedes usar la herramienta de terceros jwt.io en el sitio web de AuthO para comprobar las notificaciones de los tokens. Si usas AWS Amplify, verifica que las notificaciones de los tokens cumplan con los requisitos de la regla de autorización del tipo de esquema del modelo. Por ejemplo, la siguiente plantilla de asignación de resolución de Amplify comprueba los datos enviados por la verificación de autorización preliminar que realiza AWS AppSync.
#if( $util.authType() == "User Pool Authorization" ) #if( !$isAuthorized ) #set( $staticGroupRoles = [{"claim":"cognito:groups","entity":"Admin","allowedFields":xxxxx,yyyyy}] ) #foreach( $groupRole in $staticGroupRoles ) #set( $groupsInToken = $util.defaultIfNull($ctx.identity.claims.get($groupRole.claim), []) ) #if( $groupsInToken.contains($groupRole.entity) ) #if( $groupRole.isAuthorizedOnAllFields ) #set( $isAuthorized = true ) #break #else $util.qr($allowedFields.addAll($groupRole.allowedFields)) #end #end #end #end #end
Además, si usas Amplify, verifica que las reglas de autorización del esquema permitan crear, leer, actualizar o eliminar operaciones. Para obtener más información, consulta Customize authorization rules en el sitio web de Amplify Docs.
Autorización de IAM
Revisa las políticas que se aplican al usuario o rol de AWS Identity and Access Management (IAM) que firma la solicitud en AWS AppSync. Para comprobar que se conceda appsync:GraphQL en el bloque Acción para cada uno de los campos a los que accede el usuario, usa el siguiente comando:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "appsync:GraphQL" ], "Resource": [ "arn:aws:appsync:us-east-1:111122223333:apis/graphql-api-id/types/Query/fields/field-1", "arn:aws:appsync:us-east-1:111122223333:apis/graphql-api-id/types/Mutation/fields/field-2" ] } ] }
Nota: Sustituye graphql-api-id por el ID de tu API de GraphQL y field-1 y field-2 por tus campos.
Si utilizas Amplify para generar las plantillas de asignación de resolución, verifica lo siguiente:
- El nombre de la sesión de rol con el que se emiten las credenciales de IAM es igual a CognitoIdentityCredentials.
- Las credenciales de IAM son las mismas que las del rol de autenticación o no autenticación que genera Amplify.
Si el nombre de la sesión de rol no coincide con la cadena, se deniega el acceso al campo o la operación.
Autorización de Lambda
- Comprueba la lógica personalizada que escribiste en el código de la función de Lambda donde se emite isAuthorized para asegurarte de que esté establecida en true.
- Asegúrate de que la matriz deniedFields no contenga la operación o el campo solicitados.
- Consulta los registros de CloudWatch o añade sentencias de depuración para verificar el flujo lógico y determinar la autorización del usuario.
Uso de varios modos de autorización
Cuando la API de AWS AppSync tiene varios modos de autorización, la API utiliza el modo de autorización predeterminado que está establecido. Para un tipo o campo que requiera uno de los otros modos de autorización, también debes establecer una directiva de autorización para ese modo. Para obtener más información, consulta Using multiple authorization types with AWS AppSync GraphQL APIs. Por ejemplo, una API de AWS AppSync tiene API_KEY configurado como modo de autorización predeterminado y AMAZON_COGNITO_USER_POOLS como modo de autorización adicional. Si deseas utilizar ambos modos, debes configurar las directivas de autorización @aws_api_key y @aws_cognito_user_pools.
type Post @aws_api_key @aws_cognito_user_pools { id: ID! author: String title: String }
Nota: El modo de autorización API_KEY predeterminado rechaza las solicitudes por los siguientes motivos:
- Se envía un JWT de Amazon Cognito en el encabezado de la solicitud.
- Faltan las directivas en el esquema de GraphQL.
- Etiquetas
- AWS AppSync
- Idioma
- Español

Contenido relevante
- preguntada hace 2 meses
- preguntada hace 5 meses
- preguntada hace 3 meses
- Respuesta aceptadapreguntada hace 3 meses
- preguntada hace 4 meses
- OFICIAL DE AWSActualizada hace 3 años