【问题标题】:Allowed OAuth 2.0 Redirect URIs for Native App本机应用程序允许的 OAuth 2.0 重定向 URI
【发布时间】:2021-11-21 13:50:58
【问题描述】:

我正在开发一个带有环回接口重定向的 OAuth 本机应用程序,并尝试将 RFC6749(OAuth 2.0 授权框架)与 RFC8252(用于本机应用程序的 OAuth 2.0)协调一致:

在 RFC6749 中,规范要求使用绝对 URI 作为客户端的重定向端点(3.1.2 部分):

重定向端点 URI 必须是绝对 URI ...端点 URI 不得包含片段组件。

但是,这似乎在 RFC8252 中有一个例外。规范声明任何端口都可用于环回 IP 重定向 URI(7.3 部分):

授权服务器必须允许在请求环回 IP 重定向 URI 时指定任何端口,以适应在请求时从操作系统获取可用临时端口的客户端。

并表示将支持环回 IP 重定向 URI (Appendix A.):

支持原生应用的 OAuth 服务器必须:...

  1. 支持环回 IP 重定向 URI。这是支持桌面操作系统所必需的。

RFC8252 还提供了注册说明(8.4 部分):

授权服务器必须要求客户端注册其完整的重定向 URI(包括路径组件)并拒绝指定与注册的重定向 URI 不完全匹配的授权请求;例外是环回重定向,除了端口 URI 组件之外,需要完全匹配。

因此,我了解具有本机应用客户端的 OAuth 2.0 授权服务器的正确行为是:

  1. 需要注册一个环回重定向 URI(即http://127.0.0.1/oauth2redirect/example-provider),可能带有通配符端口:*
  2. 在对/authorize 的GET 请求中,将redirect_uri 请求参数与注册的URI 匹配,允许指定任何端口(即http://127.0.0.1:61023/oauth2redirect/example-provider 将被接受)李>

我在这里遗漏了什么吗?这是具有已注册本机应用程序的 OAuth 2.0 授权服务器的预期行为吗?

【问题讨论】:

    标签: redirect oauth-2.0 oauth native loopback


    【解决方案1】:

    对于桌面应用程序,通常的做法是在运行时找到一个空闲端口,然后在 URL(例如 http://localhost:8000)处启动一个环回服务器,无需任何路径。此侦听器的存在只有一个原因,即接收登录响应。

    理论上,您可以将http://localhost 注册为客户端的重定向URI,并且任何端口都可以使用,尽管我很少看到授权服务器支持。

    这里有一些example code of mine 来展示它的外观。因此,我的应用程序为端口 8001-8003 注册了三个特定的重定向 URL。

    您是对的,应该只注册确切的 URL,以避免打开重定向器漏洞。桌面应用程序和多个端口的 RFC8252 行为是一种特殊情况。您可以选择使用它,也可以使用不同的端口注册多个重定向 URI。

    另一种选择是为桌面应用程序使用私有 URI 方案(我个人更喜欢这个)。移动应用应使用 HTTPS 重定向 URI,作为最安全的选项 - 这是 required for financial-grade apps

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 2017-05-25
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2018-02-02
      • 2017-07-02
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多