首页 > 解决方案 > 是否应允许非机密客户端应用程序使用 OAuth 2.0 客户端凭据流?

问题描述

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

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

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

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

标签: ruby-on-railsoauth-2.0oauthdoorkeeper

解决方案


client_credentials 授权只能由机密客户端使用,因为客户端需要存储机密。这是因为客户端需要将 client_id 和 client_secret 发送到授权服务器才能获得 Token。我不知道client_credentials流只能与client_id一起使用的任何特殊方式。

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

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


推荐阅读