【问题标题】:MS Graph, daemon app 401 unauthorized on Files.ReadWrite.All callsMS Graph,在 Files.ReadWrite.All 调用上未经授权的守护程序应用程序 401
【发布时间】:2017-07-15 07:28:26
【问题描述】:

更新:我已收到 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    

然后,我遵循了 Client Credentials flow 的文档,包括授予该应用的管理员同意,以便在我的公司租户中使用。

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

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

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

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

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

【问题讨论】:

  • 您找到解决方案了吗?我现在也很想尝试 :) 我会随时告诉你我的经历如何......

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


【解决方案1】:

为那些偶然发现这个问题的人结束循环。在上传或更改文件权限时,Files.ReadWrite.All 在 App-Only 场景中存在问题。

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

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 2017-06-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多