我应该将 PKCE 用于 OpenID Connect 与本机桌面应用程序吗?
Should I use PKCE for OpenID Connect with Native Desktop Application?
我想为我的原生 windows 和 Linux 桌面应用程序使用 OpenID Connect 来验证我的用户。
如 "OAuth 2.0 for Native Apps" Section 7.3 所述,我想打开一个 本地 TCP 端口以从身份验证服务器重定向 以获取授权码。我认为没有其他选项可用于同时适用于 Windows 和 Linux.
的本机应用程序
所以 流程就像:
- 本机应用启动并显示登录按钮
- 按下登录按钮时
- 本机应用打开一个临时的本地端口
- 浏览器打开身份验证提供程序的登录页面(发送客户端 ID 和密码、重定向 URI 和范围 openid,response_type=代码)
- 在浏览器中成功验证用户后
- 身份验证提供程序重定向到重定向 URI,即本地开放端口
- 本地端口应向用户显示类似“立即关闭浏览器并返回应用程序”的内容
- 本机应用程序从重定向获取代码并关闭端口
- 本机应用程序要求令牌端点使用代码
获取身份令牌
- 使用签名验证身份令牌
- 将能够从该身份令牌中获取用户的详细信息
我现在的问题是 我需要 PKCE 吗? 我找到了 this article which states it does not bring any extra safety apart from making sure that when another app on the same device has registered the same Private-Use URI Scheme Redirect。
我的计划是否有任何其他缺陷或需要进一步改进? 我知道客户端 ID 和密码可以被视为“public”,因为它们已发货使用该软件可以进行逆向工程。但是我的软件将不会在 public 网页上提供(希望如此)并且只提供给受信任的客户(他们都有不同的客户 ID 和机密)。
我也很难理解桌面流程。我建议将私有 uri 方案作为最佳解决方案——我从这里开始写了一些跨平台文章,它们可能会给您一些想法:
https://authguidance.com/2018/01/11/desktop-apps-overview/
Gary,如有任何后续问题,请随时联系我
OAuth 和本机应用程序带来了一些复杂性。这是因为本机应用程序在本机运行,而 OAuth 依赖浏览器来完成流程。首先,我欢迎您查看一些 other questions and answers,其中讨论了与本机应用程序相关的技术。
从协议的角度来看,PKCE 已强制执行。这正在根据即将推出的新 RFC (draft-ietf-oauth-security-topics-12) 进行讨论。使用 PKCE,您可以避免将授权代码泄露给在最终用户机器上运行的恶意应用程序。
原因是,从授权服务器来看,它只依赖客户端 ID 和重定向 URL 来识别正确的客户端。因此,如果授权响应被拦截,那么任何一方都可以获得令牌。 PKCE 通过引入在运行时生成的安全随机机密来避免这种情况。这不会被存储,只会在受 SSL 保护的令牌请求中进行通信。因此,PKCE 减少了窃取令牌的威胁向量。
对于原生应用,注册自定义url方案是获得授权响应的完美方式。正如规范所指出的那样,将其与 PKCE 结合使用。
我想为我的原生 windows 和 Linux 桌面应用程序使用 OpenID Connect 来验证我的用户。
如 "OAuth 2.0 for Native Apps" Section 7.3 所述,我想打开一个 本地 TCP 端口以从身份验证服务器重定向 以获取授权码。我认为没有其他选项可用于同时适用于 Windows 和 Linux.
的本机应用程序所以 流程就像:
- 本机应用启动并显示登录按钮
- 按下登录按钮时
- 本机应用打开一个临时的本地端口
- 浏览器打开身份验证提供程序的登录页面(发送客户端 ID 和密码、重定向 URI 和范围 openid,response_type=代码)
- 在浏览器中成功验证用户后
- 身份验证提供程序重定向到重定向 URI,即本地开放端口
- 本地端口应向用户显示类似“立即关闭浏览器并返回应用程序”的内容
- 本机应用程序从重定向获取代码并关闭端口
- 本机应用程序要求令牌端点使用代码 获取身份令牌
- 使用签名验证身份令牌
- 将能够从该身份令牌中获取用户的详细信息
我现在的问题是 我需要 PKCE 吗? 我找到了 this article which states it does not bring any extra safety apart from making sure that when another app on the same device has registered the same Private-Use URI Scheme Redirect。
我的计划是否有任何其他缺陷或需要进一步改进? 我知道客户端 ID 和密码可以被视为“public”,因为它们已发货使用该软件可以进行逆向工程。但是我的软件将不会在 public 网页上提供(希望如此)并且只提供给受信任的客户(他们都有不同的客户 ID 和机密)。
我也很难理解桌面流程。我建议将私有 uri 方案作为最佳解决方案——我从这里开始写了一些跨平台文章,它们可能会给您一些想法: https://authguidance.com/2018/01/11/desktop-apps-overview/
Gary,如有任何后续问题,请随时联系我
OAuth 和本机应用程序带来了一些复杂性。这是因为本机应用程序在本机运行,而 OAuth 依赖浏览器来完成流程。首先,我欢迎您查看一些 other questions and answers,其中讨论了与本机应用程序相关的技术。
从协议的角度来看,PKCE 已强制执行。这正在根据即将推出的新 RFC (draft-ietf-oauth-security-topics-12) 进行讨论。使用 PKCE,您可以避免将授权代码泄露给在最终用户机器上运行的恶意应用程序。
原因是,从授权服务器来看,它只依赖客户端 ID 和重定向 URL 来识别正确的客户端。因此,如果授权响应被拦截,那么任何一方都可以获得令牌。 PKCE 通过引入在运行时生成的安全随机机密来避免这种情况。这不会被存储,只会在受 SSL 保护的令牌请求中进行通信。因此,PKCE 减少了窃取令牌的威胁向量。
对于原生应用,注册自定义url方案是获得授权响应的完美方式。正如规范所指出的那样,将其与 PKCE 结合使用。