【问题标题】:Why is Microsoft Oauth2 API changing the scope of authorization requests?为什么 Microsoft Oauth2 API 会更改授权请求的范围?
【发布时间】: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


【解决方案1】:

我也发现这个问题很烦人。如果您使用 Python 和 oauthlib 来处理身份验证请求,请继续阅读 -

在 Python 3 和 requests_oauthlib 库中,这会生成 Warning,而不是 Exception。如果您看到源代码,那么您会在oauthlib/oauth2/rfc6749/parameters.py 中找到这些行:

if not os.environ.get('OAUTHLIB_RELAX_TOKEN_SCOPE', None):
    w = Warning(message)
    w.token = params
    w.old_scope = params.old_scopes
    w.new_scope = params.scopes
    raise w

因此,您只需在您的环境中将OAUTHLIB_RELAX_TOKEN_SCOPE 变量设置为True,即可忽略此警告。

【讨论】:

    【解决方案2】:

    有文件/lib/python2.7/site-packages/oauthlib/oauth2/rfc6749/parameters.py

    [1]

    如图所示,有一个环境变量“OAUTHLIB_RELAX_TOKEN_SCOPE”。只需将其添加到您的环境中,值为 'True' 或 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-04
      • 2021-12-13
      • 1970-01-01
      • 2022-08-19
      • 2017-11-11
      • 2017-06-26
      • 1970-01-01
      相关资源
      最近更新 更多