Azure active directory Microsoft Azure-OAuth2-“的;无效的“U请求”;

Azure active directory Microsoft Azure-OAuth2-“的;无效的“U请求”;,azure-active-directory,postman,microsoft-graph-api,Azure Active Directory,Postman,Microsoft Graph Api,我想将我的应用程序与Microsoft Graph连接。我在Azure中创建了我的web应用程序(我有我的客户id和客户机密)。我可以从https://login.microsoftonline.com/common/oauth2/v2.0/authorize 问题是,当我发送POST请求以便从https://login.microsoftonline.com/common/oauth2/v2.0/token(与“使用权限”部分中所述完全相同)使用邮递员(使用表单数据选项),我得到一个“AADS

我想将我的应用程序与Microsoft Graph连接。我在Azure中创建了我的web应用程序(我有我的
客户id
客户机密
)。我可以从
https://login.microsoftonline.com/common/oauth2/v2.0/authorize

问题是,当我发送
POST
请求以便从
https://login.microsoftonline.com/common/oauth2/v2.0/token
(与“使用权限”部分中所述完全相同)使用邮递员(使用
表单数据
选项),我得到一个“AADSTS9000410:格式错误的JSON”错误:

此外,当我在Postman中使用原始选项发送相同的请求时,我会得到“AADSTS900144:请求正文必须包含以下参数:‘grant_type’”:

然而,当我在Postman中删除标题中的
application/json
,并放入
x-www-form-urlencoded
选项时,一切看起来都很好

我只能在应用程序中发送JSON格式的
POST
请求

Microsoft Graph是否支持POST请求的JSON格式


这是邮递员问题吗?

我遇到了类似的问题,但意识到
内容类型:application/x-www-form-urlencoded
标头和JSON格式的请求正文之间不匹配。如果您参考,您将看到请求主体需要进行URL编码(与符号、编码实体等连接),这最终解决了我的问题。所以,我认为这不是Postman或MS API的问题,而是请求正文的格式不正确

我不确定你的应用程序使用哪种语言,但下面是一个使用Node和Express的示例,对我来说很有用:

const fetch=require('node-fetch')
const{URLSearchParams}=require('url')
异步函数getAccessToken(req、res、next){
试一试{
const response=等待获取('https://login.microsoftonline.com/common/oauth2/v2.0/token', {
方法:“POST”,
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”
},
//以前我在做'body:JSON.stringify({…})`,但是
//JSON!==URL编码。使用“URLSearchParams”(或其他任何形式)
//在你的语言中,对等词是成功的关键。
正文:新URLSearchParams({
客户id:您的客户id在这里,
作用域:“User.Read Calendars.Read”,
重定向\u uri:您的\u重定向\u URL\u在此处,
授权类型:“授权码”,
客户秘密:这里是你的客户秘密,
代码:req.query.code
}
})
const json=await response.json()
//`json`将具有`access_token`和其他属性
}捕捉(错误){
失误
}
}

希望能有所帮助!

这既不是Microsoft的问题,也不是邮递员的问题,这只是OAuth如何定义令牌工作流的问题。定义如下:

客户端通过使用附录B中的
应用程序/x-www-form-urlencoded
格式发送以下参数向令牌端点发出请求,HTTP请求实体体中的字符编码为UTF-8


我正在使用云的JavaScript应用程序上工作,因此我无法更改请求的内容类型:我必须使用内容类型json。这是我发现的唯一一个使用这种特殊内容类型的API。我不想结束这个问题,也许有一天,我们将使用
内容类型:application/json
得到一个解决方案。谢谢!根据微软的建议文档,我认为不支持
Content-Type:application/json
,所以您可能运气不好。
{
  "error": "invalid_request",
  "error_description": "AADSTS9000410: Malformed JSON.\r\nTrace ID: f5c1dd4b-ad43-4265-91cb-1b7392360301\r\nCorrelation ID: 1dea54ed-bb43-4951-bc9e-001877fe427b\r\nTimestamp: 2019-01-14 21:38:42Z",
  "error_codes": [9000410],
  "timestamp": "2019-01-14 21:38:42Z",
  "trace_id": "f5c1dd4b-ad43-4265-91cb-1b7392360401",
  "correlation_id": "1dea54ed-bb43-4951-bc9e-001878fe427b"
}
 {
  "error": "invalid_request",
  "error_description": "AADSTS900144: The request body must contain the following parameter: 'grant_type'.\r\nTrace ID:a7c2f8f4-1510-42e6-b15e-b0df0865ff00\r\nCorrelation ID:e863cfa9-0bce-473c-bdf6-e48cfe2356e4\r\nTimestamp: 2019-01-1421:51:29Z",
  "error_codes": [900144],
  "timestamp": "2019-01-14 21:51:29Z",
  "trace_id": "a7c2f8f4-1510-42e6-b15e-b0df0865ff10",
  "correlation_id": "e863cfa9-0bce-473c-bdf6-e48cfe2356e3"
}