【发布时间】:2023-03-28 05:55:01
【问题描述】:
我正在创建一个需要从 Microsoft Work 帐户请求用户授权的应用程序。并偶然发现了两次。
一开始我只是想看用户邮件,所以我请求了以下范围:
- User.Read
- Mail.Read
- Mail.ReadWrite
- Mail.ReadWrite.Shared
- Mail.Read.Shared
但是,我不断收到“范围已更改”错误,并注意到来自 Microsoft 的授权响应自动将 Mail.Send 范围包含到请求中,即使我没有请求它并且它没有出现在授权网页上。
我的用户不关心额外的身份验证,所以我只是在我的请求中添加了 Mail.Send 并继续前进。很好。
我现在需要将 offline_access 包含到范围列表中,这样我才能获得刷新令牌并让应用程序在后台运行。但是当我这样做时,即使授权页面显示“脱机访问您的数据”并且在身份验证期间没有发生错误,Microsoft 也会回复我一个缺少“offline_access”授权的授权请求,但我的 Oauth2 流程因“范围已更改”错误而中断:
Scope has changed from "mail.readwrite mail.read.shared mail.read
mail.readwrite.shared mail.send offline_access user.read" to "mail.readwrite
mail.read.shared mail.read mail.readwrite.shared mail.send user.read"
这是 Microsoft Oauth 流程中的错误,还是我做错了什么?
编辑:我查看了https://apps.dev.microsoft.com/ 上的应用程序权限,但未列出“offline_access”范围,或任何其他看似相关的范围。也许这意味着 Graph 还不支持该范围,尽管它已被大量记录?
【问题讨论】:
-
offline_access范围已列出。我可以确认这一点。 -
我也看到了。我尝试使用“配置文件”范围,并将其作为 URI 返回。所以答案似乎是使用 Google 使用的与 OpenID Connect 标准配置文件名称相对应的完整 URI。如下所述,问题似乎出在 oauthlib 而不是 Google 本身,如果需要,可以覆盖该行为。 (糟糕,OP 是关于微软的——还有一个关于谷歌的类似问题;但我认为评论的主旨仍然有效。)
标签: oauth microsoft-graph-api outlook-restapi azure-api-apps