azure-active-directory - MS Graph,守护程序app 401在Files.ReadWrite.All上未经授权

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

更新:我已经收到Microsoft的通知,该问题是Graph API中的错误。他们正在研究解决方案。

我正在使用新的O2.0 v2.0 OAuth流程对我的应用进行身份验证以与Microsoft Graph一起使用,以使其能够列出任何用户文件,在任何用户OneDrive中下载和上传文件以及设置文件权限。这无需用户登录即可将其作为服务帐户/守护程序运行。

我已经在新的“应用程序注册”门户中设置了新的“融合应用程序”。我已经设置了所有必要的范围/应用程序许可权,包括Files.ReadWrite.All。 (我实际上选中了所有可能的框...)。在Microsoft Graph文档中,当调用我感兴趣的端点时,这应该是唯一必要的范围:

/v1.0/users/{userID}/drive
/v1.0/users/{userID}/drive/items/{ItemID}/children
/v1.0/users/{userID}/drive/items/{ItemID}/content
/v1.0/users/{userID}/drive/items/{ItemID}/invite
/v1.0/users/{userID}/drive/items/{ItemID}/createLink    

然后,我遵循了Client Credentials flow的文档,包括将Admin Consent授予该应用程序以供我的公司租户使用。

我已成功收到访问 token 。收到访问 token 后,我在jwt.io处再次检查了该 token 实际上包含所有作用域(包括Files.ReadWrite.All)。

我能够使用此访问 token 来获取任何用户的驱动器并列出所有用户文件(上面列出的前两个端点)。我也尝试过获取所有用户文件的缩略图,这些缩略图效果很好。但是,一旦我尝试下载文件,为文件添加权限或创建共享链接(上面列出的最后三个端点),我就会收到401 Unauthorized错误。由此,我认为范围Files.Read.All可以正常工作,但是范围Files.ReadWrite.All无法正常工作。

至于我从Scopes documentation可以理解的内容,我正在尝试使用的范围应该起作用。它在“需要管理员同意的仅应用程序权限”部分中,将Files.ReadWrite.All描述为:

Allows the app to read, create, update and delete all files in all site collections without a signed in user.



我撞墙了。新的v2.0 OAuth token 和/或Microsoft Graph是否存在关于我缺少的仅应用程序访问的限制?

最佳答案

为那些在此问题上迷迷糊糊的人关闭循环。在上载或更改文件权限时,在仅应用程序的情况下Files.ReadWrite.All存在问题。

下载的问题无关。下载文件时出现授权错误是由于在下载请求中传递了Authorization header 。/content/端点返回一个可用于下载文件的URL。这是一个短时间存在的预授权URL。在该请求中传递Authorization header 会导致错误,因为它不希望收到这样的 header ,也无法确定应使用哪个凭据( super 简化,但这是一般思路)。

关于azure-active-directory - MS Graph,守护程序app 401在Files.ReadWrite.All上未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42439078/

相关文章:

azure - 无法获取自定义 AD 应用程序的访问 token

c# - HttpProvider.SendAsync() 空内容

javascript - OneDrive REST API - CORS POST 请求

python - 查询 OneDrive 中的文件返回空列表

Azure 服务主体 - 故意强制过期?

使用 AD token 获取请求时出现 Azure Blob 存储 "Authorization Permission Mismatch"错误

python - 使用 python 的 MS Graph 身份验证

javascript - Onedrive api 如何附加文件而不是下载?

angularjs - 如何使用 Azure AD 授权 Node.js API?

c# - HttpClient - PostAsync 不返回