我应该将 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.

的本机应用程序

所以 流程就像:

我现在的问题是 我需要 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 结合使用。