Keycloak KeyClope在模板中使用IdP显示名称而不是别名

Keycloak KeyClope在模板中使用IdP显示名称而不是别名,keycloak,freemarker,Keycloak,Freemarker,身份提供者链接电子邮件模板使用身份提供者的“别名”(identityProviderAlias)作为电子邮件正文中的变量之一。我更喜欢使用IdP的“显示名称” 我尝试了identityProviderDisplayName,但结果显示null 我的IdP别名类似于“公司产品sso”,显示名称为“公司sso” 更新: 我现在还尝试使用identityProviderContext,如下所示: identityProviderContext.getIdpConfig().getAlias()返回与i

身份提供者链接电子邮件模板使用身份提供者的“别名”(
identityProviderAlias
)作为电子邮件正文中的变量之一。我更喜欢使用IdP的“显示名称”

我尝试了
identityProviderDisplayName
,但结果显示
null

我的IdP别名类似于“公司产品sso”,显示名称为“公司sso”

更新:

我现在还尝试使用
identityProviderContext
,如下所示:
identityProviderContext.getIdpConfig().getAlias()
返回与
identityProviderAlias
相同的内容(不大写除外)
identityProviderContext.getIdpConfig().getDisplayName()
返回
null
。像这样使用它:

${kcSanitize(msg("identityProviderLinkBodyHtml", identityProviderContext.getIdpConfig().getDisplayName(), realmName, identityProviderContext.username, link, linkExpiration, linkExpirationFormatter(linkExpiration)))?no_esc}
感谢@jan garaj指向将
别名
brokerContext
变量添加到模板属性的代码

第二次更新:
好的,显然社交提供者(我在测试环境中使用的)没有显示名称。当定义显示名称时,上述方法确实有效。我在下面添加了一个答案。

该属性在模板级别不可用-它没有传递到那里。请参阅源代码:

brokerContext(在主题中作为
identityProviderContext
提供)具有指向显示名称的路径,但显示名称对于某些提供商是可选的,而对于其他提供商(例如GitHub社交提供商)则不可用

我更新了identity-provider-link.ftl,将原始参数
identityProviderAlias
替换为:

identityProviderContext.getIdpConfig().getDisplayName()!identityProviderAlias
将使用正文中的显示名称(如果可用)。否则,它默认为原始别名参数


我还创建了一个增强请求,使显示名称可用于电子邮件主题,而不使用模板

这个答案并不完全正确,但链接中的源代码对找到解决方案非常有帮助。谢谢你,简!