我看过这两篇文章,它们为这个问题提供了解决方案,但它们没有提供足够详细的信息,说明如何为像我这样的非 Java 开发人员执行此操作:
Keycloak 添加来自数据库/外部源的额外声明
如何在 Keycloak 中注册自定义 ProtocolMapper?
这是他们的解决方案的概述,如果提供更多详细信息,可以帮助其他人。
第一个链接的预期过程
用户登录
我的自定义协议映射器被调用,在那里我覆盖了 transformAccessToken 方法
在这里,我将协议映射器所在的客户端作为服务登录到 keycloak。这里不要忘记使用另一个客户端 ID 而不是您正在为其构建协议映射器的客户端 ID,否则您将进入无限递归。
我将访问令牌放入协议映射器中,然后调用应用程序的其余端点来获取额外的声明,这是安全的。
获取端点返回的信息并将其添加为额外声明
从第二个链接实现它的步骤
实现 ProtocolMapper 接口并添加包含对类的引用的文件 “META-INF/services/org.keycloak.protocol.ProtocolMapper”。
此时,Keycloak 识别出新的实现。您应该能够通过管理控制台对其进行配置。
要向令牌添加一些数据,请添加以下接口
org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper
并根据接口实现方法
然后添加文件“ META-INF/jboss-deployment-structure.xml ”,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.keycloak.keycloak-services"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
完成所有这些之后,在对 URL http://:/auth/realms/testrealm/protocol/openid-connect/token 的每个请求时都会调用自定义的 transformAccessToken() 方法
阅读本文后,我有几个问题:
你如何“实施ProtocolMapper”
你在哪里添加前面提到的文件?(在我的 Keycloak 安装文件夹中看不到任何 META-INF/ 目录)
您如何以及在哪里“添加以下接口”
自定义的 transformAccessToken() 是什么样的
谢谢大家的时间。如果我错过了总结他们的答案,请告诉我。
慕标5832272
拉莫斯之舞
相关分类