ruby-on-rails - 是否应允许非机密客户端应用程序使用 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 框架说它只能由机密客户端使用。
解决方案
client_credentials 授权只能由机密客户端使用,因为客户端需要存储机密。这是因为客户端需要将 client_id 和 client_secret 发送到授权服务器才能获得 Token。我不知道client_credentials流只能与client_id一起使用的任何特殊方式。
据我所知,门卫文档也没有提到这一点。
但是当客户端需要保存秘密时,我不会在非机密客户端中使用 client_credentials 流。而且我不会使用任何仅将其 client_id 发送到 /token 端点的授权来获取令牌。
推荐阅读
- c++ - 检查平衡括号代码的行为不符合预期
- python - 使用 pip 命令时出错,但 conda 命令正在安装软件包,所有可能的升级都已完成
- azure - 由于错误 MSB3191,Azure 应用服务构建失败:无法创建目录
- django - Django通过外键注释
- linux - 向 docker-compose 添加卷是否会重新创建容器并删除定义更改的容器中的数据?
- git - git:同一用户多个客户端主机,无法正常工作
- java - 如何有效地在firebase recyclerview中加载大量数据
- java - 使用 RestTemplate 反序列化 JSON 数组
- html - CSS中具有相对位置的文本重叠图像?
- javascript - 使用python获取所有javascript变量字符串值