Microsoft Graph OAuth问题

时间:2017-10-13 07:57:07

标签: azure oauth azure-active-directory microsoft-graph

我有一个后台JS应用程序,不会有任何用户输入,所以我在没有用户输入的情况下使用应用程序身份验证。我在Azure AD门户网站和apps.dev.microsoft.com中设置了一个应用程序。

我使用以下端点:

login.microsoftonline.com/{Tenant}/oauth2/token

使用以下正文:

client_id: application_id  
client_secret: generated key  
grant_type: client_credentials   
scope: "https://graph.microsoft.com/.default"  

这会生成access_token但是当我尝试使用图API时,我会收到以下错误

  

访问令牌验证失败

当调查令牌与使用用户输入的普通OAuth令牌相比时,我注意到它传入角色而不是scp,而观众是我的应用程序,而不是graph.microsoft.com。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

在Azure AD门户中注册的应用程序与Azure AD V1.0端点一起使用,该应用程序在apps.dev.microsoft.com中注册,适用于v2.0端点,请首先参考this document了解'关于v2.0端点的不同。

要使用Azure AD v2.0访问安全资源而无需用户交互(客户端凭据流),您应该向/ token v2.0 端点发送POST请求:

POST /common/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=qWgdYAmab0YSkuL1qKv5bPX&grant_type=client_credentials

您可以参考this document了解如何在Azure AD V2.0端点上使用OAuth 2.0客户端凭据授权。

如果您想使用azure ad v1.0(在azure portal中注册的应用程序)和客户端凭证流程,您可以参考this document。在azure ad v1.0中,您应指明客户端应用请求授权的resource参数,在您的方案中,如果您想获取令牌以调用microsoft graph api,则资源应为https://graph.microsoft.com/