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
Postman Capture d'écran - Ne fonctionne pas
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
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.
Authorization
pas method.response.header.Authorization
-- 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.
Dans mon cas, le code d'autorisation devrait être id_token
. J'ai commis une erreur en utilisant access_token
à la place
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.
J'ai eu les mêmes problèmes, la solution était simplement de redéployer le projet.
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: