Microsoft graph api 请求访问令牌时的资源参数?
我正在跟踪以使用Microsoft Graph进行身份验证。我能够成功地执行第一个请求(请求授权码),但第二个请求(请求访问令牌)有问题 第二个请求的参数(用于访问令牌): 我在文档中没有看到这个资源参数,除了在上获取访问令牌下的示例 我的问题是:Microsoft graph api 请求访问令牌时的资源参数?,microsoft-graph-api,Microsoft Graph Api,我正在跟踪以使用Microsoft Graph进行身份验证。我能够成功地执行第一个请求(请求授权码),但第二个请求(请求访问令牌)有问题 第二个请求的参数(用于访问令牌): 我在文档中没有看到这个资源参数,除了在上获取访问令牌下的示例 我的问题是: 当我的请求似乎与文档匹配时,为什么会出现上述错误 何时需要包含资源参数 编辑:见下面Marc的回答和我的评论回复 原来我使用了以下URL: https://login.microsoftonline.com/common/oauth2/authori
https://login.microsoftonline.com/common/oauth2/authorize
https://login.microsoftonline.com/common/oauth2/token
当我应该使用:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
https://login.microsoftonline.com/common/oauth2/v2.0/token
在使用了带有v2.0
的那些之后,我不再需要在令牌请求中包含我的资源
参数。根据
目标资源无效,因为它不存在,Azure AD找不到它,或者配置不正确
根据,
…与Azure AD集成的任何第三方资源也是如此。这些资源中的任何一个都可以定义一组权限,用于将该资源的功能划分为更小的块
然后
通过定义这些类型的权限,资源可以对其数据以及数据的公开方式进行细粒度控制。第三方应用程序可以向应用程序用户请求这些权限。应用程序用户必须先批准权限,应用程序才能代表用户行事。通过将资源的功能分块成更小的权限集,可以构建第三方应用程序,只请求执行其功能所需的特定权限。应用程序用户可以准确地知道应用程序将如何使用他们的数据,并且他们可以更加确信应用程序没有恶意行为
因此,要回答1)我认为您只需要在Azure广告页中为您的应用程序指定user.read权限。回答2)您不会为第三方应用程序指定资源。看起来您提供了正确的属性,但格式不正确。要获取令牌,您需要将此数据格式化为
application/x-www-form-urlencoded
发送到https://login.microsoftonline.com/common/oauth2/v2.0/token
。从您的示例来看,它看起来像是您以JSON
而不是x-www-form-urlencoded
的形式发送数据
POST URL: https://login.microsoftonline.com/common/oauth2/v2.0/token
POST HEADER: Content-Type: application/x-www-form-urlencoded
POST BODY: grant_type=authorization_code&code=[AUTHORIZATION CODE]&
client_id=[APPLICATION ID]&client_secret=[PASSWORD]
&scope=[SCOPE]&redirect_uri=[REDIRECT URI]
几个月前我写了一篇文章,也许能帮助你完成这个过程 这是针对Microsoft Graph应用程序(不是Azure AD),我在Microsoft Graph应用程序页面上设置了user.read委派权限。您已链接到Azure AD指南,这是我困惑的根源。您可能需要启用Azure广告权限才能使该示例正常工作。嗨,Marc,感谢您的回复和精彩的博客文章。我在我的问题中设置了一些奇怪的参数。我通过POST将其发送至,内容类型为:application/x-www-form-urlencoded,并通过正文发送我的参数。如果有关系的话,我现在只是在使用Postman,但最终将通过Java(但不是Android)来实现这一点。所以,我仍然在做你在回答和博客文章中所说的一切,但仍然得到同样的错误。你还有别的想法吗?或者需要我提供其他细节?明白。你能在你的通话中添加完整的URI和标题吗?算了吧!根据您的建议,我仔细查看了我的URL,结果发现我使用的是
https://login.microsoftonline.com/common/oauth2/authorize
和https://login.microsoftonline.com/common/oauth2/token
(没有v2.0
)这就是问题所在。我不确定我是如何得到不匹配的URL的,但这就是问题所在。我只是简单地将两者都设置为v2.0
,一切都开始工作了。我会接受你的回答,因为它是正确的。我会确保从一开始就包含完整的URL。URL的“2.0”部分正是我所需要的,谢谢!
{
"error": "invalid_resource",
"error_description": "AADSTS50001: Resource identifier is not provided.\r\nTrace ID: <my trace id>\r\nCorrelation ID: <my correlation id>\r\nTimestamp: 2017-05-03 15:25:42Z",
"error_codes": [
50001
],
"timestamp": "2017-05-03 15:25:42Z",
"trace_id": <my trace id>,
"correlation_id": <my correlation id>
}
resource: https://graph.microsoft.com/
POST URL: https://login.microsoftonline.com/common/oauth2/v2.0/token
POST HEADER: Content-Type: application/x-www-form-urlencoded
POST BODY: grant_type=authorization_code&code=[AUTHORIZATION CODE]&
client_id=[APPLICATION ID]&client_secret=[PASSWORD]
&scope=[SCOPE]&redirect_uri=[REDIRECT URI]