我希望我的服务器应用程序使用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的应用程序权限,但它仍然不适用于我.
以下是我使用的帐户的详细信息:
最佳答案 在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: