J'utilise l'interface utilisateur AWS Cognito pour me connecter à l'aide du flux d'octroi de code d'autorisation et obtenir le code d'autorisation avec succès. Mais obtenir une erreur de méthode 405 non autorisée lorsque la demande de publication est faite au point de terminaison oauth2 / token via postman
Le client d'application est configuré dans le pool d'utilisateurs Cognito avec le secret d'application passant appclientid: appclientsecret comme autorisation dans l'encodage base64.
6 Réponses :
J'avais un problème similaire. Dans mon cas, j'ai dû changer l'en-tête Accepter en */*
.
Quand je l'ai eu comme Accept=text/html,application/xhtml+xml,application/xml
il a répondu avec 405 au point de terminaison / token. Espérons que cela aide quelqu'un.
Comme indiqué dans la documentation:
Content-Type Doit toujours être 'application / x-www-form-urlencoded'.
Source: https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
Utilisez BasicAuth of Authentication et indiquez Username
= client_id
, Password
= client_secret
Utiliser la méthode POST
Utilisez Body
= x-www-form-urlencoded
N'oubliez pas d'utiliser également State
valeur State
dans Body.
J'écrivais du code en c # pour un jeton avec le type de subvention authorisation_code et tous les appels échouaient avec le statut 405 Method Not Allowed .
Selon la documentation AWS, l'URL et les paramètres suivants doivent être utilisés
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token Content-Type='application/x-www-form-urlencoded' Authorization=Basic aSdxd892iujendek328uedj grant_type=authorization_code& client_id=djc98u3jiedmi283eu928& code=AUTHORIZATION_CODE& redirect_uri=com.myclientapp://myclient/redirect
Après avoir passé 2 heures, j'ai découvert que supprimer et de l'URL résoudrait le problème, alors assurez-vous que votre demande ressemble à ceci
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token& Content-Type='application/x-www-form-urlencoded'& Authorization=Basic aSdxd892iujendek328uedj grant_type=authorization_code& client_id=djc98u3jiedmi283eu928& code=AUTHORIZATION_CODE& redirect_uri=com.myclientapp://myclient/redirect
var strClientSecret = $"{"your_clientId"}:{"your_clientsecret"}"; var client = new HttpClient(); var body = new Dictionary<string, string>(); body.Add("grant_type", "client_credentials"); body.Add("client_id", "your_appclientid"); body.Add("redirect_uri", "your_callbackurl"); var content = new FormUrlEncodedContent(body); var autho = System.Text.Encoding.UTF8.GetBytes(strClientSecret); var base64Autho = System.Convert.ToBase64String(autho); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64Autho); client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded"); var response = await client.PostAsync("https://your_domain.auth.ap-south-1.amazoncognito.com/oauth2/token", content);
Eh bien, juste au cas où cela aiderait quelqu'un.
J'étais face à un 405 dans Postman
tout en essayant de récupérer les jetons jwt respectifs (id_token, access_token, refresh_token) tout en utilisant le grant_type comme code_autorisation.
la raison étant la section des en-têtes où j'utilisais 'application/x-www-form-urlencoded'
comme valeur pour Content-Type
c'est-à Content-Type
dire avec des guillemets simples. Ainsi, lorsque j'ai supprimé ces guillemets simples et utilisé uniquement application/x-www-form-urlencoded
tout de suite, cela a commencé à fonctionner.