oauth - 每个设备是否应该让 Keycloak 中的用户通过资源所有者密码凭据进行身份验证
问题描述
我正在使用人类用户和物联网设备在 Keycloak 中实现身份验证系统。
人类用户:通过 spa 访问系统并使用基于标准重定向的身份验证流程。
物联网设备:该用例涉及许多高价值设备,这些设备不具有交互性,需要将遥测数据传输到后端并访问它们自己的数据以及来自相关用户的数据。我目前的计划是使用资源所有者密码凭据授予,因为可以在配置期间使用凭据设置嵌入式系统。
我的想法是,这将使我能够使用 Keycloak 组和角色进行权限管理和用户 <-> 设备关联。
这种方法有什么本质上的错误吗?
解决方案
我目前的计划是使用资源所有者密码凭据授予,因为可以在配置期间使用凭据设置嵌入式系统。
从源代码可以阅读:
资源所有者密码凭证授予类型适用于资源所有者与客户端具有信任关系的情况,例如设备操作系统或高特权应用程序。授权服务器在启用此授权类型时应特别小心,并且仅在其他流程不可行时才允许它。
此授权类型适用于能够获取资源所有者凭据(用户名和密码,通常使用交互式表单)的客户端。它还用于使用直接身份验证方案(例如 HTTP Basic 或 Digest 身份验证)将现有客户端迁移到 OAuth,方法是将存储的凭据转换为访问令牌:
您的用例是否满足这些限制?
如果不是,请考虑改用客户端凭据授予:
使用机器对机器 (M2M) 应用程序(例如 CLI、守护程序或在后端运行的服务)时,系统会验证和授权应用程序而不是用户。对于这种情况,用户名 + 密码或社交登录等典型身份验证方案没有意义。相反,M2M 应用程序使用客户端凭据流(在 OAuth 2.0 RFC 6749,第 4.4 节中定义),其中它们传递其客户端 ID 和客户端密钥来验证自己并获取令牌。
因此,在后者中,您将使用客户端密码而不是使用用户名和密码进行身份验证。
我的想法是,这将使我能够使用 Keycloak 组和角色进行权限管理和用户 <-> 设备关联。
您仍然可以向机密客户端添加声明并将其用于权限管理。
推荐阅读
- javascript - 为什么我的角色在我的 2D 横向卷轴中移动不顺畅?
- c# - Xamarin Android
- python - IBM Watson 未正确解析来自 python 请求的 json 有效负载 (400)
- c - ANTLRv3:C 目标错误处理。更改 System.err out
- python - Numpy:如何将颜色矩阵转换为扁平向量
- c# - 如何在 Visual Studio 2017 中修复此错误
- r - 单个对象作为多个功能输入
- python-3.x - 我如何得到它,这样我的箱线图就不会彼此重叠
- html - Swal 显示加载属性 HTML
- javascript - 如何网页抓取 JS 字符串?