使用哪个 OAuth 2.0 流程?

Which OAuth 2.0 flow to use?

我已阅读 rfc6749 和 https://auth0.com/docs/authorization/which-oauth-2-0-flow-should-i-use,但我似乎无法找到完全适合我的用例的流程。

将有一个本机应用程序(本质上是一个 GUI),它将在最终用户设备上启动守护进程。守护进程将尝试调用后端托管的内部 API。内部API无需验证用户身份;但最好能在一定程度上验证设备身份。后端会有一个 OAuth 授权服务器来处理逻辑。但我无法确定在这种情况下使用哪个流程是正确的。

最初我认为这很适合客户端凭据授予类型。但后来我意识到这可能是一个 public 客户端,但客户端凭据应该仅用于机密客户端。

然后我开始了解PKCE流程的授权码。这似乎是本机应用程序的推荐流程,但对我来说没有多大意义,因为会有重定向,用户需要交互,但将调用的 API 应该是内部的,用户不应该知道这些后台通道的东西。此外,在这种情况下,资源所有者应该与客户端相同,应该是机器而不是用户。

那么我应该使用哪个流程?

非常感谢您的帮助!

客户端凭据感觉像是标准选项,但有一些变化:

单一客户端密码

这不是一个好的选择,因为在传输过程中捕获消息的任何人都可以访问任何用户的数据。

每个用户的客户端密码

使用 Dynamic Client Registration 可能是一种选择,其中应用程序的每个实例都有自己的客户端 ID 和密码,链接到用户。

守护进程然后使用这个值,如果秘密在传输过程中以某种方式被捕获,它只会影响一个用户。

更强大的客户秘密

客户端凭据授权也可以用于更强大的机密,例如 Client Assertion,如果您想避免发送实际机密,这会很有用。

此类解决方案涉及在每个用户进行身份验证时为他们生成一个密钥,然后将私钥存储在设备上,例如钥匙串中。