azure – 如何在没有用户交互的情况下授权服务使用Microsoft Graph用户帐户?

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

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

我正在尝试使用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中发出相同的请求时,响应包括该帐户的一个驱动器根目录中的所有项目.

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

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

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

更新:

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

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

《azure – 如何在没有用户交互的情况下授权服务使用Microsoft Graph用户帐户?》

最佳答案 在Microsoft Graph授予“对用户可以访问的所有文件具有完全访问权限”权限后,请尝试单击“必需权限”刀片中的“授予权限”(更好地使用管理员帐户):

《azure – 如何在没有用户交互的情况下授权服务使用Microsoft Graph用户帐户?》

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

更新

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

>注册本机应用程序,添加“具有用户可以访问的所有文件的完全访问权限”Microsoft Graph的委派权限(不要单击授予权限按钮,如上图所示).使用资源所有者密码凭据授予并获取访问令牌,只能在scp声明中找到User.Read:

邮编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
>单击授予权限按钮如上图所示,使用资源所有者密码凭据授予并获取访问令牌,您可以在scp声明中找到Files.ReadWrite.All User.Read:

《azure – 如何在没有用户交互的情况下授权服务使用Microsoft Graph用户帐户?》

点赞