【发布时间】: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 服务器必须:...
- 支持环回 IP 重定向 URI。这是支持桌面操作系统所必需的。
RFC8252 还提供了注册说明(8.4 部分):
授权服务器必须要求客户端注册其完整的重定向 URI(包括路径组件)并拒绝指定与注册的重定向 URI 不完全匹配的授权请求;例外是环回重定向,除了端口 URI 组件之外,需要完全匹配。
因此,我了解具有本机应用客户端的 OAuth 2.0 授权服务器的正确行为是:
- 需要注册一个环回重定向 URI(即
http://127.0.0.1/oauth2redirect/example-provider),可能带有通配符端口:* - 在对
/authorize的GET 请求中,将redirect_uri请求参数与注册的URI 匹配,但允许指定任何端口(即http://127.0.0.1:61023/oauth2redirect/example-provider将被接受)李>
我在这里遗漏了什么吗?这是具有已注册本机应用程序的 OAuth 2.0 授权服务器的预期行为吗?
【问题讨论】:
标签: redirect oauth-2.0 oauth native loopback