根据OAuth 2.0授权框架,当通过客户端凭证授予流程获得授权时,它说:
客户端证书授予类型必须仅供机密客户端使用。我已经实现了一个OAuth 2.0提供程序API与doorkeeper (Ruby on Rails gem)。但是,由OAuth 2.0提供程序创建的非机密客户端应用程序只能使用其client_id(即没有client_secret)的client Credentials Grant流。这是一种预期行为吗?
当我想保护我的资源服务器API时,我遇到了这个问题,这样即使对于不需要最终用户被授权的公共端点,即当客户端是资源所有者时,客户端仍然需要提供访问令牌。
在这个用例中,授权码授予流不相关,因为资源所有者不是最终用户,并且根据最新的OAuth 2.0安全建议,不建议使用隐式授予流。在此基础上,我发现客户端凭证授予流是最相关的流,但我想再次检查它是否适合使用,即使OAuth 2.0框架说它必须仅由机密客户端使用。
client_credentials授权必须仅由机密客户端使用,因为客户端需要存储秘密。这是因为客户端需要向授权服务器发送client_id和client_secret以获取令牌。我不知道有什么特殊的方法可以让client_credentials流只与client_id一起使用。
据我所知,门卫文档也没有提到这一点。
但是,当客户端需要保存秘密时,我不会在非机密客户端中使用client_credentials流。我不会使用任何Grant,它只发送它的client_id而没有其他任何东西到/token端点来获取token。