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

Keycloak use IdP display name instead of alias in templates

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

我尝试了 identityProviderDisplayName,但是打印了 null

我的 IdP 别名类似于“company-prod-sso”,显示名称是“Company SSO”

更新:

我现在也尝试使用 identityProviderContext 如下: identityProviderContext.getIdpConfig().getAlias() returns 与 identityProviderAlias 相同(除了不大写)。 identityProviderContext.getIdpConfig().getDisplayName() returns null。像这样使用它:

${kcSanitize(msg("identityProviderLinkBodyHtml", identityProviderContext.getIdpConfig().getDisplayName(), realmName, identityProviderContext.username, link, linkExpiration, linkExpirationFormatter(linkExpiration)))?no_esc}

感谢@jan-garaj 指出将 aliasbrokerContext 变量添加到模板属性的代码。

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

该属性在模板级别不可用 - 它不会在那里传递。查看源码:https://github.com/keycloak/keycloak/blob/master/services/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailTemplateProvider.java#L151

brokerContext(在主题中作为 identityProviderContext 提供)有显示名称的路径,但显示名称对于某些提供者是可选的,只是在其他提供者上不可用(GitHub 社交例如提供者)。

我通过将原始参数 identityProviderAlias 替换为:

来更新身份提供者-link.ftl
identityProviderContext.getIdpConfig().getDisplayName()!identityProviderAlias

这将使用正文中的显示名称(如果可用)。否则默认为原始别名参数。

我还创建了一个增强请求,使显示名称可用于不使用模板的电子邮件主题。 https://issues.redhat.com/browse/KEYCLOAK-16380