web-dev-qa-db-fra.com

AWS Api Gateway Authorizer + Le groupe d'utilisateurs ne fonctionne pas correctement {"message": "Non autorisé"}

J'essaie d'utiliser un autorisateur de passerelle aws api avec un groupe d'utilisateurs Cognito. Il fonctionne bien lorsque je teste avec la console de passerelle aws api. 

Mais lorsque j'essaie d'activer l'autorisation dans l'API, il indique "message": "Unauthorized". Veuillez vérifier ci-dessous la capture d'écran.

Capture d'écran de la console de la passerelle API - Cela fonctionne très bien  enter image description here

Postman Capture d'écran - Ne fonctionne pas  enter image description here

Quelqu'un peut aider s'il vous plaît.

FYI j'ai suivi les instructions mentionnées ici http://docs.aws.Amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

9
Manivannan Guru

J'ai essayé la solution de Mathias et ça n'a pas marché au début. Bizarrement, je peux y revenir des heures plus tard et réessayer. Cette fois, d'autres modifications ont été apportées à la passerelle de mon API avant le déploiement de l'API. Cette fois, cela a fonctionné, même si les autres changements que j'ai apportés étaient superficiels.

De plus, comme c'est souvent le cas, les documents AWS sont incorrects, indiquant que vous devez utiliser method.response.header.Authorization. Ceci n’est valable que pour Lambda utilisant l’authentification personnalisée. Vous devez en effet n'utiliser que Authorization ici lorsque vous utilisez le nouveau programme Cognito User Pool Authorizer.

  1. Utilisez Authorization pas method.response.header.Authorization
  2. Apporter un changement superficiel à votre ressource dans API Gateway
  3. Déployez votre API et attendez une seconde

-- modifier --

Je venais de convertir ma pile en Cloudformation et j'ai découvert que si vous utilisez Cloudformation pour déployer Authorizer, vous devez en fait spécifier le method.response.header.Authorization complet pour la source du jeton. En fait, le déploiement d'une pile échouera si vous n'utilisez pas ce format. Cependant, une fois déployé, si vous regardez Authorizer dans la console, la partie method.response.header sera supprimée.

4
Miles

Dans mon cas, le code d'autorisation devrait être id_token. J'ai commis une erreur en utilisant access_token à la place

3
Long Nguyen

Comme vous, j’ai eu le même problème et j’ai réalisé que j’étais entré dans une mauvaise source de jetons.

Entrez dans <your API> -> Authorizers -> Token Source le nom de l'en-tête HTTP où la passerelle d'API doit rechercher le jeton. (dans votre cas, Authorization)

Enregistrez-le et n'oubliez pas de le déployer avant de le tester.

 enter image description here

2
Mathias

J'ai eu les mêmes problèmes, la solution était simplement de redéployer le projet.

0
raphadko

Les étapes ci-dessous corrigent le problème pour moi. En bref, il semble y avoir un bogue dans AWS API Gateway. Vous pouvez résoudre ce problème en redéployant l'API:

  1. Remplacez le validateur de demandes deNONEpar Validate Body
  2. Actions -> Déployez l'API -> choisissez l'étape où vous souhaitez le déployer. 
  3. Remplacez le validateur de demandes par Validate Body parNONE
  4. Refaire l'étape 2. 

 enter image description here

0
C.Lee