Mesures prises jusqu'à présent:
user_pool_client_id
user_pool_client_id
cochez la case "Cognito User Pool", ajoutez https://localhost
en tant qu'url de rappel et de déconnexion, cochez "Autorisation de code d'autorisation", "Octroi implicite" et tout ce qui se trouve sous "Autorisé OAuth Étendues"user_pool_domain
Créer un nouvel utilisateur avec un nom d'utilisateur/mot de passe
Maintenant, je peux accéder avec succès à:
https://{{user_pool_domain}}.auth.us-east-2.amazoncognito.com/oauth2/authorize?response_type=code&client_id={{user_pool_client_id}}&redirect_uri=https%3A%2F%2Flocalhost
Cela me présente une page de connexion et je peux me connecter en tant qu'utilisateur qui me renvoie à https://localhost/?code={{code_uuid}}
J'essaye alors ce qui suit: curl -X POST https://{{user_pool_domain}}.auth.us-east-2.amazoncognito.com/oauth2/token -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=authorization_code&redirect_uri=https%3A%2F%2Flocalhost&code={{code_uuid}}&client_id={{user_pool_client_id}}'
Cependant, cela renvoie simplement ce qui suit: {"error":"unauthorized_client"}
Les documents de point de terminaison de jeton disent que unauthorized_client
est dû au fait que "Le client n'est pas autorisé pour le flux d'octroi de code ou pour l'actualisation des jetons" ce qui est déroutant car j'ai coché les cases permettant au client d'utiliser le flux d'octroi de code.
Ainsi, il s'avère que le pool d'utilisateurs doit avoir une barre oblique de fin (https://localhost/
), puis cette barre oblique de fin doit être utilisée dans toutes les URL de rappel. Ensuite, il décide de travailler!
Tout me va bien. Je pense qu'il peut se plaindre de l'en-tête d'autorisation manquant mais pas sûr. Vous pouvez essayer plusieurs choses:
1) Selon cette page ( https://docs.aws.Amazon.com/cognito/latest/developerguide/token-endpoint.html ), vous ne devriez pas avoir besoin d'envoyer l'en-tête d'autorisation dans la demande de jeton, mais peut-être est-elle toujours nécessaire. Vous pouvez essayer de ne transmettre que l'ID client (autorisation [ID client]) ou configurer un secret et essayer de passer l'autorisation [ID client: secret client] comme il est dit). Il est généralement judicieux d'utiliser un secret client pour le flux de code d'autorisation de toute façon, car dans ce flux, il existe un composant côté serveur qui peut gérer en toute sécurité l'échange de jetons.
2) Essayez plutôt d'utiliser le flux implicite pour voir si cela fonctionne. Le flux implicite est logique pour les applications d'une seule page sans composant côté serveur. Pour cela, aucun secret client n'est nécessaire.