Keycloak 添加来自数据库/外部源的额外声明
Keycloak add extra claims from database / external source
我无法预测我可以从我的应用程序数据库中添加额外声明的方式。鉴于我有限的理解,我看到了两种方式:
- 身份验证成功后,keycloak 会以某种方式从应用程序数据库中提取额外的声明。例如,此应用程序数据库是 postgres。
- 让应用程序使用共享密钥使用额外声明更新 jwt。
我想要一些反馈。我觉得拳头的选择可能更安全。但是,我不确定从哪里开始实施之旅。
在这里回答我自己的问题。我将这个问题交叉发布到此处的 Keycloak 用户邮件列表 (http://lists.jboss.org/pipermail/keycloak-user/2017-April/010315.html) 并得到了一个似乎合理的答案。
这是我从那里收到的答案粘贴而来的。
我使用第一个选项。我用一个协议映射器来做,这是一个方便的地方,因为令牌已经由 keycloak 构建但尚未签名。这是程序:
用户登录
我的自定义协议映射器被调用,我在其中覆盖了 transformAccessToken
方法
这里我把协议映射器所在的客户端作为服务登录到keycloak中。这里不要忘记使用另一个客户端 ID,而不是您正在为其构建协议映射器的客户端 ID,否则您将进入无限递归。
我将访问令牌获取到协议映射器中,然后我调用我的应用程序的其余端点来获取额外的声明,这是安全的
获取端点返回的信息并将其添加为额外声明
我无法预测我可以从我的应用程序数据库中添加额外声明的方式。鉴于我有限的理解,我看到了两种方式:
- 身份验证成功后,keycloak 会以某种方式从应用程序数据库中提取额外的声明。例如,此应用程序数据库是 postgres。
- 让应用程序使用共享密钥使用额外声明更新 jwt。
我想要一些反馈。我觉得拳头的选择可能更安全。但是,我不确定从哪里开始实施之旅。
在这里回答我自己的问题。我将这个问题交叉发布到此处的 Keycloak 用户邮件列表 (http://lists.jboss.org/pipermail/keycloak-user/2017-April/010315.html) 并得到了一个似乎合理的答案。
这是我从那里收到的答案粘贴而来的。
我使用第一个选项。我用一个协议映射器来做,这是一个方便的地方,因为令牌已经由 keycloak 构建但尚未签名。这是程序:
用户登录
我的自定义协议映射器被调用,我在其中覆盖了
transformAccessToken
方法这里我把协议映射器所在的客户端作为服务登录到keycloak中。这里不要忘记使用另一个客户端 ID,而不是您正在为其构建协议映射器的客户端 ID,否则您将进入无限递归。
我将访问令牌获取到协议映射器中,然后我调用我的应用程序的其余端点来获取额外的声明,这是安全的
获取端点返回的信息并将其添加为额外声明