是否应允许非机密客户端应用程序使用 OAuth 2.0 客户端凭据流程?

Should non-confidential client applications be allowed to use the OAuth 2.0 Client Credentials flow?

根据 OAuth 2.0 授权框架,当通过 Client Credentials Grant 流程获得授权时,它说: “客户端凭据授予类型必须仅由机密客户端使用。”

我已经实现了一个 OAuth 2.0 提供程序 API 和门卫(Ruby 在 Rails gem 上)。但是,由 OAuth 2.0 提供商创建的非机密客户端应用程序只能使用带有 client_id 的客户端凭证授予流程,即没有 client_secret。这是预期的行为吗?

我在寻求保护我的资源服务器 API 时遇到了这个问题,这样即使 public 端点不需要最终用户被自动化,即当客户端是资源所有者,客户端仍然需要提供访问令牌。

在此用例中,授权代码授予流程不相关,因为资源所有者不是最终用户,并且根据最新的 OAuth 2.0 安全建议,不建议使用隐式授予流程。在此基础上,我发现客户端凭证授予流程是最相关的流程,但我想仔细检查它是否适合使用,即使 OAuth 2.0 框架规定它只能由机密客户端使用。

client_credentials 授予只能由机密客户端使用,因为客户端需要存储秘密。这是因为客户端需要向授权服务器发送 client_id 和 client_secret 才能获得令牌。 我不知道 client_credentials 流程只能与 client_id.

一起使用的任何特殊方式

据我所知,看门人文档也没有提到这一点。

但是当客户端需要保存机密时,我不会在非机密客户端中使用 client_credentials 流程。而且我不会使用任何只发送其 client_id 而没有其他任何东西到 /token 端点来获取令牌的授权。