我正在使用AWS Cognito UI通过授权码授予流程进行登录,并成功获取了授权码。但是通过邮递员向oauth2 / token端点发出发布请求时,出现 405方法不允许错误
已在Cognito用户池中设置了应用程序客户端,并以base64编码的身份通过appclientid:appclientsecret传递了应用程序秘密。
答案 0 :(得分:1)
使用身份验证的BasicAuth并提供Username
= client_id
,Password
= client_secret
使用POST
方法
使用Body
= x-www-form-urlencoded
也不要忘记在正文中使用State
值。
答案 1 :(得分:0)
我有类似的问题。就我而言,我不得不将Accept标头更改为*/*
。
当我将其设为Accept=text/html,application/xhtml+xml,application/xml
时,它以405响应/ token端点。希望能对某人有所帮助。
答案 2 :(得分:0)
如文档中所述:
内容类型 必须始终为“ application / x-www-form-urlencoded”。
来源:https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
答案 3 :(得分:0)
我正在用C#编写具有Authorization_code授予类型的令牌的代码,并且所有调用均以 405不允许的方法状态失败。
根据AWS文档,应使用以下URL和参数
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
花了2个小时后,我发现从URL中删除&会引起问题,因此请确保您的请求看起来像这样
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
答案 4 :(得分:0)
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);
答案 5 :(得分:0)
好吧,以防万一它对任何人都有帮助。
在尝试检索相应的邮件时,我在邮递员中遇到405 jwt令牌(id_token,access_token,refresh_token)使用 grant_type作为授权码。
原因是标题部分,我在其中使用'application/x-www-form-urlencoded'
作为Content-Type
的值,即使用单引号。因此,当我删除这些单引号并立即使用application/x-www-form-urlencoded
时,它就开始工作。
答案 6 :(得分:0)
我通过使我的代码如下所述解决了 AWS Cognito oauth2/token
端点中的此错误 405 方法不允许错误,并且它运行良好。
我从这个链接中获得帮助,并使用正确的格式在获取请求中提及标头和正文参数:
https://formcarry.com/documentation/fetch-api-example
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": `Basic ${authData}`,
"Accept": "application/json"
},
body: `grant_type=${config.grant_type}&code=${code}&client_id=${config.clientId}&redirect_uri=${config.loginRedirectUri}`
}
fetch(`${config.domainUrl}/oauth2/token`, requestOptions)
.then(response => response.json())
.then(data => {
sessionStorage.setItem("access_token",data.access_token)
fetchUserDetails(data.access_token)
})
我使用了一个配置文件来保存变量。
const config = {
domainUrl: "https://domainname.auth.origin.amazoncognito.com",
clientId: "xxxxxxxxxxxx",
loginRedirectUri: "http://localhost:8000/redirecturi",
grant_type: "authorization_code",
logoutUri: "http://localhost:8000",
clientSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}