web-dev-qa-db-fra.com

AWS Cognito; erreur unauthorized_client lors de la frappe / oauth2 / token

Mesures prises jusqu'à présent:

  • Configurer un nouveau pool d'utilisateurs dans Cognito
  • Générez un client d'application avec pas de secret ; appelons son id user_pool_client_id
  • Sous les paramètres client du pool d'utilisateurs pour 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"
  • Créez un nom de domaine; appelons ça 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.

9
TranquilMarmot

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!

9
TranquilMarmot

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.

4
Andrew