MS Graph,守护程序应用程序 401 在 Files.ReadWrite.All 调用上未经授权

2024-05-13

更新:我收到 Microsoft 的通知,指出此问题是 Graph API 中的一个错误。他们正在研究解决方案。

我使用新的 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    

然后我按照文档进行操作客户凭证流程 https://learn.microsoft.com/azure/active-directory/develop/active-directory-v2-protocols-oauth-client-creds,包括给予管理员同意该应用程序在我的公司租户中使用。

我已成功收到访问令牌。收到访问令牌后,我仔细检查了jwt.io http://jwt.io该令牌实际上包含所有范围(包括。Files.ReadWrite.All).

我可以使用此访问令牌来获取任何用户的驱动器并列出任何用户文件(上面列出的前两个端点)。我还尝试获取任何工作正常的用户文件的缩略图。但是,一旦我尝试下载文件、向文件添加权限或创建共享链接(上面列出的最后三个端点),我就会收到401 Unauthorized错误。由此,我假设范围Files.Read.All工作正常,但范围Files.ReadWrite.All不管用。

至于我能从中了解到什么范围文档 https://graph.microsoft.io/en-us/docs/authorization/permission_scopes,我尝试使用的范围应该可以工作。它的“仅应用程序权限需要管理员同意”部分,它描述了Files.ReadWrite.All as:

允许应用在没有登录用户的情况下读取、创建、更新和删除所有网站集中的所有文件。

我碰壁了。对于我缺少的仅应用程序访问,新的 v2.0 OAuth 令牌和/或 Microsoft Graph 是否存在限制?


为那些偶然发现这个问题的人结束循环。那里was一个问题Files.ReadWrite.All在仅应用程序场景中上传或更改文件权限时。

与下载问题无关。下载文件时的授权错误源于在下载请求中传递授权标头。 `/content/ 端点返回可用于下载文件的 URL。这是一个预授权存在时间较短的 URL。在该请求中传递授权标头会导致错误,因为它不希望收到这样的标头,也无法确定应该使用哪些凭据(超级简单化,但这就是总体思路).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MS Graph,守护程序应用程序 401 在 Files.ReadWrite.All 调用上未经授权 的相关文章

随机推荐