New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Como soluciono erros “não autorizados” ao executar solicitações do GraphQL no AWS AppSync?
Quando executo solicitações do GraphQL com o AWS AppSync, recebo erros “não autorizados”.
Breve descrição
Há dois tipos de erros não autorizados que são definidos pelo código de status HTTP retornado na resposta:
- 401 Não autorizado: A solicitação é negada pelo AWS AppSync ou pelo modo de autorização porque as credenciais estão ausentes ou não são válidas.
- Resposta de 200 OK com um erro de tipo não autorizado: A solicitação foi negada devido a um problema no nível do resolvedor ou além dele.
Para determinar a causa do erro não autorizado, tente reproduzir o problema em um navegador da Web. Em seguida, use as ferramentas de rede do navegador para capturar as mensagens de solicitação e resposta HTTP. Analise as mensagens para determinar onde o erro ocorreu. Para analisá-las off-line, salve as mensagens em um arquivo HTTP Archive (HAR).
Resolução
401 Resposta não autorizada
Para obter uma resposta 401 não autorizada, verifique a solicitação de rede que envia o payload do GraphQL para confirmar que:
- O cabeçalho Authorization ou x-api-key está presente e contém as credenciais corretas para o modo de autorização exigido pela operação ou pelo campo. Se o cabeçalho não tiver as credenciais corretas, o modo de autorização rejeitará a solicitação.
- Para JSON Web Tokens (JWT), consulte O cabeçalho de autorização não inclui o texto “Bearer” no site do GitHub.
- O JWT é do grupo de usuários correto do Amazon Cognito ou do provedor OpenID Connect (OIDC).
- As credenciais são válidas e não expiraram.
Resposta de 200 OK
Para obter mais detalhes sobre o que causa erros não autorizados em uma resposta de 200 OK, ative os Amazon CloudWatch Logs na API do AWS AppSync. É uma prática recomendada definir o registro de logs em nível de campo como Todos e incluir conteúdo detalhado.
As solicitações que recebem uma resposta de 200 OK com o tipo de erro Não autorizado e a mensagem Não autorizado para acessar X no tipo Y são negadas pela lógica nos modelos de mapeamento do resolvedor Apache Velocity Template Language (VTL). Para resolver esse problema, conclua as etapas de solução de problemas a seguir para o modo de autorização que você usa.
Autorização do Amazon Cognito e do OIDC
Compare as declarações de token do usuário, como grupos, e-mail_verified e ID do cliente ou público, com as verificações de autorização nos modelos de mapeamento do resolvedor de VTL. É possível usar a ferramenta de terceiros jwt.io no site AuthO para verificar as reivindicações do token. Se você estiver usando o AWS Amplify, verifique se as declarações de token atendem aos requisitos da regra de autorização no tipo de esquema do modelo. Por exemplo, o modelo de mapeamento de resolvedor a seguir para o Amplify verifica os dados que são passados da verificação de autorização preliminar que o AWS AppSync faz.
#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
Além disso, se você estiver usando o Amplify, verifique se as regras de autorização no esquema permitem operações de criação, leitura, atualização ou exclusão. Para obter mais informações, consulte Personalizar regras de autorização no site do Amplify Docs.
Autorização do IAM
Analise as políticas aplicadas ao usuário ou ao perfil do AWS Identity and Access Management (AWS IAM) que assina a solicitação no AWS AppSync. Para verificar se AppSync:GraphQL é concedido no bloco Action para cada um dos campos que o usuário acessa, execute o seguinte 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" ] } ] }
Observação: Substitua graphql-api-id pelo ID da sua API GraphQL e field-1 e field-2 pelos seus campos.
Se você estiver usando o Amplify para gerar os modelos de mapeamento do resolvedor, verifique o seguinte:
- O nome da sessão de perfil com a qual as credenciais do IAM são emitidas é igual a CognitoIdentityCredentials.
- As credenciais do IAM são as mesmas do perfil de autenticação ou desautenticação que o Amplify gera.
Se o nome da sessão de perfil não corresponder à string, o acesso ao campo ou à operação será negado.
Autorização do Lambda
- Verifique a lógica personalizada que você escreveu no código da função do Lambda em que isAuthorized é emitido para garantir que ela esteja definida como verdadeiro.
- Certifique-se de que a matriz deniedFields não contenha o campo ou a operação solicitados.
- Verifique os logs do CloudWatch ou adicione instruções de depuração para verificar o fluxo lógico e determinar a autorização do usuário.
Usando vários modos de autorização
Quando sua API do AWS AppSync tem vários modos de autorização, a API usa o modo de autorização padrão definido. Para um tipo ou campo que exige um dos outros modos de autorização, você também deve definir uma diretiva de autorização para esse modo. Para obter mais informações, consulte Uso de vários tipos de autorização com as APIs do AWS AppSync GraphQL. Por exemplo, uma API do AWS AppSync tem API_KEY definida como o modo de autorização padrão e tem AMAZON_COGNITO_USER_POOLS como um modo de autorização adicional. Se você quiser usar os dois modos, deverá definir as diretivas de autorização @aws_api_key e @aws_cognito_user_pools.
type Post @aws_api_key @aws_cognito_user_pools { id: ID! author: String title: String }
Observação: O modo de autorização padrão API_KEY rejeita solicitações pelos seguintes motivos:
- Um JWT do Amazon Cognito é enviado no cabeçalho da solicitação.
- As diretivas estão ausentes no esquema GraphQL.

Conteúdo relevante
- feita há 2 meseslg...
- feita há um mêslg...
- Resposta aceitafeita há um mêslg...
- feita há 22 diaslg...
- feita há um mêslg...
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 4 meses
- AWS OFICIALAtualizada há 3 meses