我正在尝试使用Postman工具从Microsoft Graph API获取accessToken。我在Authorization选项卡中尝试使用Type = oauth2.0,以便我可以将此accessToken用于后续的Get,Post请求。
如果grant_type是“授权代码”,那么一切正常。但是当grant_type为 client_credentials 时,邮递员会抛出以下错误
从client_credentials流获取访问令牌时出错。不能 发送请求
我查看了DeveloperTools中的Network选项卡,它没有为client_credentials流提交Client_Id,Client_Secret。
问题:如何让 client_credentials grant_type方案获得Postman工作?
我错过了这里的任何一步吗?请指导我..
由于
答案 0 :(得分:2)
我迟到了,但希望如果其他人在寻找这个,他们可以找到它,因为我们遇到了同样的问题。
前两个答案(https://stackoverflow.com/a/65708126/6772160 和 https://stackoverflow.com/a/50270148/6772160)引导我们朝着正确的方向前进,但我们仍然必须翻译这个才能在 Postman 中正常工作:
正如 Mahmoud 提到的,您可以发送 client_id
和 client_secret
作为基本身份验证:
Basic Auth
不过,主要部分是将 grant_type
处理为 client_credentials
。为此,我们输入:
grant_type=client_credentials
在请求正文中。
单击正文 > 选择 x-www-form-urlencoded > 键 = grant_type
和值 = client_credentials
。
完成后,“正文”选项卡应如下所示: Body Tab
希望有帮助!
答案 1 :(得分:0)
尝试提供以下详细信息:
Request Type: POST
URL: https://XXXXXXXXXXXXXXXXXXXXXXXX/token?grant_type=client_credentials
Authorization: Basic [client_id]:[client_secret]
Content-Type: application/x-www-form-urlencoded
输出应如下所示:
{
"access_token": "90778b6abce64fc124892ce66f7a8ecd",
"token_type": "Bearer",
"expires_in": 60,
"scope": ""
}
注意:提供[client_id]:[client_secret]
作为BASE64Encoded。
答案 2 :(得分:0)
您应该将其作为 raw
或 x-www-form-urlencoded
数据发送,如下例所示:
重要标题>>>> Content-Type: application/x-www-form-urlencoded
var data = "grant_type=client_credentials";
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function() {
if(this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://########/oauth/v2/token");
xhr.setRequestHeader("Authorization", "Basic ###############");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);