13
votes

Erreur de méthode 405 non autorisée dans AWS Cognito oauth2 / token endpoint

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.


0 commentaires

6 Réponses :


3
votes

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.


0 commentaires

7
votes

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


0 commentaires

6
votes

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.


0 commentaires

2
votes

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


0 commentaires

0
votes
        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);

0 commentaires

0
votes

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.


0 commentaires