如何在自定义Keycloak主题中获取Realm名称及配置actionUri
Keycloak自定义主题:获取Realm名称生成动态链接解决方案
问题1:为info.ftl的actionUri参数设置含Realm名称的值
Keycloak的Freemarker模板可直接访问内置上下文对象,无需额外配置actionUri参数,直接在info.ftl中用${realm.name}获取当前Realm名称,自行构造所需链接即可。比如生成当前Realm的登录链接:
<a href="${authServerUrl}/realms/${realm.name}/protocol/openid-connect/auth?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI">返回登录页面</a>
如果确实要通过actionUri参数传递,需扩展Keycloak的LoginActionsService或对应认证流程类,在处理账户更新逻辑时,将包含Realm名称的完整URL赋值给actionUri属性再传递到模板。但这种方式需要修改Keycloak核心代码,不如直接在模板中使用内置对象便捷。
问题2:将Realm名称作为消息参数调用
修改消息文件:在
base\login\messages中,把accountUpdatedMessage改为带占位符的格式,示例:accountUpdatedMessage=您的账户已更新成功,点击<a href="https://your-domain/realms/%s/login">返回登录页面</a>其中
%s是接收Realm名称的占位符。传递参数到消息:找到Keycloak触发该消息的代码位置(通常在
UpdatePassword或ProfileUpdate等处理账户更新的类中),调用消息时传入Realm名称作为参数,示例逻辑:String message = Messages.getMessages().get("accountUpdatedMessage", realm.getName());若不想修改Keycloak核心代码,也可直接在
info.ftl中拼接消息和Realm名称:<div class="info-message"> ${msg("accountUpdatedMessage")} <a href="${authServerUrl}/realms/${realm.name}/login">返回登录页面</a> </div>这种方式无需改动后端代码,更适配自定义主题场景。
内容的提问来源于stack exchange,提问作者jpm
相关产品推荐
相关产品推荐

