Mar*_*ard 5 oauth-2.0 openid-connect keycloak
当我使用 Keycloak 处理身份验证并使用它颁发的令牌来保护我的 API 时,keycloak 是否提供了类似于 Github 的支持个人访问令牌的方法?当我的应用程序使用 Web 浏览器时,通过 OIDC 流程登录可以正常工作,但如何处理从 CLI 或无头 API 脚本为我的应用程序登录?
我可以支持密码流程,在提供用户名和密码后取回 JWT 令牌,但我假设一旦用户配置了 2FA 或者如果他们在后端使用 SAML,那么所有的赌注都会被取消,因为用户名和密码不会让您访问。这正是 Github 提供个人访问令牌的原因。有没有某种方法可以使用 Keycloak 实现类似的功能,或者我们是否必须在自己的应用程序中构建它,然后除了 JWT 之外还接受这些令牌。
我的设想是 Keycloak 能够在其用户存储中生成和存储个人访问令牌,用户可以通过 Keycloak 向用户提供的 UI 生成和撤销该令牌。然后,我的 CLI 可以使用此令牌获取 JWT,然后像 Web 浏览器或其他客户端一样继续调用我的 API。
最近的 Keycloak 版本添加了对在 CLI 脚本编写期间使用 OTP 的一些支持。到目前为止我还没有玩过它,所以我不能向你展示任何食谱。尝试从“身份验证”->“HTTP 质询流程”设置开始。
关于用户令牌,您可以将所需的功能实现为 Keycloak 的 SPI 扩展(请参阅文档中的服务器开发部分)。从我的角度来看,应该有两个组成部分:
这是一个粗略的例子:
让用户令牌像 UUID 字符串一样,因此所有用户令牌都可以存储在用户属性中(用户设置管理 UI 中的“属性”选项卡)。
您的某些 API 可能会引入专用端点,该端点将接受有效的访问令牌<生成新的 UUID 用户令牌,通过管理 API 将其存储在 keycloak 用户属性中,然后将此令牌返回给用户。
然后,我们创建自定义身份验证器 SPI 实现,该实现将从直接授予身份验证请求中提取用户令牌并对其进行验证。
最后一步是为相应的 OIDC 客户端正确配置直接授权身份验证流程。如果身份验证请求中没有提供用户令牌,则此流程应像默认情况一样工作,并且应仅验证用户令牌并忽略其他凭据(如果存在用户令牌)。
Keycloak“服务器开发”文档和 keycloak 源代码对于此类任务非常有帮助。
| 归档时间: |
|
| 查看次数: |
2845 次 |
| 最近记录: |