我希望我的服务器应用程序使用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的应用程序权限,但它仍然无效。
以下是我正在使用的帐户的详细信息:
答案 0 :(得分:1)
请尝试点击Grant Permissions
(最好使用管理员帐户)&#34;所需权限&#34;刀片获得批准后#34;可以完全访问用户可以访问的所有文件&#34; Microsoft Graph的权限:
在使用资源所有者密码流获取令牌之后,您会在Files.ReadWrite.All
声明中找到scp
。然后你可以调用microsoft graph api来列出文件。
<强>更新强>
以下是我如何使资源所有者流程工作的步骤:
注册本机应用,添加&#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
点击grant permissions
按钮如上图所示,使用资源所有者密码凭据授予并获取访问令牌,您可以在Files.ReadWrite.All User.Read
声明中找到scp
:
答案 1 :(得分:0)
此问题归因于Graph API的权限。原因是,您在Microsoft Graph Explorer的特定用户下登录 - 您可以看到所有内容......由于您已经通过身份验证,因此您没有看到任何原因是因为应用程序 - 只有权限不起作用。