如何授权服务使用Microsoft Graph用户帐户而无需用户交互?

时间:2017-05-10 07:23:28

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

我希望我的服务器应用程序使用Microsoft Graph与它自己的Excel文件进​​行交互。也就是说,文件属于应用程序,而不是应用程序的特定用户。

我已使用Azure ID注册了一个应用程序,并授予了“对用户可以访问的所有文件具有完全访问权限”权限。

我正在尝试使用OAuth资源所有者密码凭据授予。

我可以获得这样的授权令牌:

POST https://login.microsoftonline.com/common/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=password
&resource=https://graph.microsoft.com
&client_id=<ID of application registered with Azure AD>
&username=<Microsoft username>
&password=<password>&scope=Files.ReadWrite.All

但响应仅表示范围User.Read

{
  "token_type": "Bearer",
  "scope": "User.Read",
  "expires_in": "3600",
  "ext_expires_in": "0",
  "expires_on": "1494467388",
  "not_before": "1494463488",
  "resource": "https://graph.microsoft.com",
  "access_token": "eyJ0e...",
  "refresh_token": "AQAB..."
}

当我尝试列出帐户的One Drive中的文件时,我没有收到错误,但响应中不包含任何内容:

Request:
GET https://graph.microsoft.com/v1.0/me/drive/root/children
Authorization: bearer eyJ0e...

Response:
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('<account ID>')/drive/root/children",
  "value": []
}

当我使用同一帐户登录时,在Graph Explorer中发出相同的请求时,响应中包含该帐户的一个驱动器根目录中的所有项目。

据我所知,当通过OAuth客户端凭据授权(根据calling Microsoft Graph in a service的说明)授权时,Microsoft Graph目前不支持仅应用程序文件访问,但由于我获得了特定用户帐户的授权(不是只是应用程序)我希望能够访问该用户文件。

我是否做错了,或者使用资源所有者密码凭据授予不支持文件访问?

如果是后者,我怎样才能实现允许我的应用程序使用用户凭据通过Microsoft Graph操作Excel文件而无需用户交互?

更新

我已将管理员权限分配给我正在使用的帐户,并在Azure门户中重新设置Microsoft Graph的应用程序权限,但它仍然无效。

以下是我正在使用的帐户的详细信息:

enter image description here

2 个答案:

答案 0 :(得分:1)

请尝试点击Grant Permissions(最好使用管理员帐户)&#34;所需权限&#34;刀片获得批准后#34;可以完全访问用户可以访问的所有文件&#34; Microsoft Graph的权限: enter image description here

在使用资源所有者密码流获取令牌之后,您会在Files.ReadWrite.All声明中找到scp。然后你可以调用microsoft graph api来列出文件。

<强>更新

以下是我如何使资源所有者流程工作的步骤:

  1. 注册本机应用,添加&#34;拥有对用户可以访问的所有文件的完全访问权限&#34;委派Microsoft Graph的权限(不要点击grant permissions按钮,如上图所示)。使用资源所有者密码凭据授予并获取访问令牌,仅在User.Read声明中找到scp

    POST https://login.microsoftonline.com/common/oauth2/token 内容类型:application / x-www-form-urlencoded grant_type =密码&安培; CLIENT_ID = XXXXXXXXXX&安培;资源= https://graph.microsoft.com/&username=XXXXXX&password=XXXXXXX

  2. 点击grant permissions按钮如上图所示,使用资源所有者密码凭据授予并获取访问令牌,您可以在Files.ReadWrite.All User.Read声明中找到scp

  3. enter image description here

答案 1 :(得分:0)

此问题归因于Graph API的权限。原因是,您在Microsoft Graph Explorer的特定用户下登录 - 您可以看到所有内容......由于您已经通过身份验证,因此您没有看到任何原因是因为应用程序 - 只有权限不起作用。