我有两个应用App1
和App2
与keycloak
进行互动,以便对用户进行身份验证。
我想在keycloak
登录页面上显示应用程序名称。
例如:如果用户登录App1
,则keycloak
登录页面应显示"登录App1"。
App2
也应该发生同样的情况。
如何实现这一目标。?
答案 0 :(得分:1)
如果您想将两者保持在同一领域,只需将javascript代码添加到custom theme login page即可。 client_id
作为请求参数传递给登录页面。例如:
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
$(window).load(function(){
var clientName = getParameterByName('client_id');
var title = document.getElementById('title');
title.innerHTML += clientName;
});
另见:
答案 1 :(得分:0)
我的猜测:使用两个不同的领域(App1, App2
)并为每个领域创建自定义的Keycloak主题 - https://www.keycloak.org/docs/latest/server_development/index.html#_themes
答案 2 :(得分:0)
如果使用自定义登录主题,则可以分别在Freemarker模板中以${client.name}
或${client.clientId}
的形式访问客户端名称或客户端ID。客户端名称可能最适合这种情况:只需通过Keycloak管理控制台将其设置为应用程序的名称即可。
不幸的是,可用的Freemarker变量没有得到很好的记录。您可以查看Keycloak的源代码(尤其是FreemarkerLoginFormsProvider类),以查找其他可用的变量。寻找到attributes.put
的电话。