2017-09-21 2 views
5

J'essaie d'utiliser aws gateway autoriseur avec pool d'utilisateurs cognito. Il fonctionne bien lorsque je teste en utilisant aws api passerelle console.AWS Api Gateway Authorizer + Pool d'utilisateurs Cognito ne fonctionne pas {"message": "Non autorisé"}

Mais quand j'essayez d'activer l'autorisation dans l'api il dit "message": "Unauthorized". S'il vous plaît vérifier ci-dessous capture d'écran

passerelle API Console Capture d'écran - Cela fonctionne bien enter image description here

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

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

Pour votre information, j'ai suivi les instructions mentionnées ici http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

+0

Est-ce simplement «nom d'utilisateur» plutôt que «cognito: nom d'utilisateur»? Je n'ai pas utilisé cette méthode exacte, mais je ne suis pas sûr que cette partie soit correcte. –

+1

cognito: nom d'utilisateur est la réponse que je reçois pour une autorisation réussie. Même moi, je reçois le même type de problème pour les autorisations personnalisées. Pour sûr, je fais quelque chose de stupide mais je n'arrive pas à le comprendre. Si quelqu'un peut aider ce serait génial .. –

+0

Je suis désolé, j'ai pris cela pour votre code. Postman dit qu'il y a 12 en-têtes dans la réponse. Pouvez-vous les poster? –

Répondre

1

J'ai eu la même question comme vous et rendu compte que je suis entré dans une mauvaise source Token.

Entrez <your API> -> Authorizers -> Token Source le nom de l'en-tête HTTP dans lequel la passerelle 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

+0

Pour votre information, j'ai donné l'autorisation de source de jeton et a également déployé l'API, toujours confronté au même problème. –

2

J'ai essayé la solution de Mathias sur et il ne fonctionnait pas au début. Bizarrement, je peux y revenir quelques heures plus tard et j'ai encore essayé, et cette fois-ci apporté d'autres changements à ma passerelle API avant de déployer l'API. Cette fois, cela a fonctionné, même si les autres changements que j'ai faits étaient superficiels.

De même, comme c'est souvent le cas, les documents AWS sont erronés, indiquant que vous devez utiliser method.response.header.Authorization. Ceci n'est vraiment valable que pour Lambda utilisant une authentification personnalisée. Vous devez en effet utiliser uniquement Authorization ici lorsque vous utilisez le nouvel utilisateur Cognito User Pool Authorizer.

  1. utilisation Authorization pas method.response.header.Authorization
  2. Faire un changement superficiel à votre ressource passerelle API
  3. Déployez votre API et attendez une seconde

- modifier -

J'étais juste convertir ma pile à Cloudformation et découvert que si vous utilisez Cloudformation pour déployer l'Authorizer, vous devez en fait spécifier le method.response.header.Authorization pour la source de jeton. En fait, un déploiement de pile échouera si vous n'utilisez pas ce format. Cependant, une fois déployé, si vous regardez le Authorizer dans la console, il aura perdu la partie method.response.header.