我一直在阅读有关 openid connect 的内容,并使用 Keycloak 做了一些实验。
我的问题是:是否可以向 OpenId Connect 服务器添加条件登录?
这就是我正在努力做的事情。我使用 Keycloak 作为身份提供者。客户允许他们的用户通过我的应用程序登录。但我不希望任何人访问这些客户端;只有付费订阅的人才能访问客户端。如果用户尝试登录,但尚未支付订阅费用,Keycloak 应重定向到用户可以购买订阅计划的页面。
如果 OpenId Connect 无法做到这一点,是否有办法使用 Keycloak 做到这一点?
谢谢
最佳答案
这里有两个问题,这是一个通用模式,而不是特定于 Keycloak:
- 验证用户身份
- 用户是否有权使用该应用
最标准的方法是使用 2 个用户数据源:
- 登录后从您自己的数据中的访问 token 查找用户
- 查看他们是否已付款
- 如果没有,则重定向至订阅计划页面
我的博客文章 User Data Management可能会给你一些想法。
可能的实现
登录后,UI 可以调用 API 端点来获取访问 token 中用户的声明:
- GET/api/userclaims/current
响应可以包含一个带有来自多个数据源的字段(声明)的对象,而不仅仅是 token 。这是sample claims object我的。
一种有用的技术是在您的 API 首次收到访问 token 时进行声明收集,然后使用相同的 token 缓存后续 API 调用的结果:
关于oauth - 使用 OpenId Connect 有条件登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62868265/