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 指出将 alias
和 brokerContext
变量添加到模板属性的代码。
第二次更新:
好的,显然社交提供者(我在测试环境中使用的)没有显示名称。当定义了显示名称时,上述方法确实有效。我在下面添加了一个答案。
该属性在模板级别不可用 - 它不会在那里传递。查看源码: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
身份提供者 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 指出将 alias
和 brokerContext
变量添加到模板属性的代码。
第二次更新: 好的,显然社交提供者(我在测试环境中使用的)没有显示名称。当定义了显示名称时,上述方法确实有效。我在下面添加了一个答案。
该属性在模板级别不可用 - 它不会在那里传递。查看源码:https://github.com/keycloak/keycloak/blob/master/services/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailTemplateProvider.java#L151
brokerContext(在主题中作为 identityProviderContext
提供)有显示名称的路径,但显示名称对于某些提供者是可选的,只是在其他提供者上不可用(GitHub 社交例如提供者)。
我通过将原始参数 identityProviderAlias
替换为:
identityProviderContext.getIdpConfig().getDisplayName()!identityProviderAlias
这将使用正文中的显示名称(如果可用)。否则默认为原始别名参数。
我还创建了一个增强请求,使显示名称可用于不使用模板的电子邮件主题。 https://issues.redhat.com/browse/KEYCLOAK-16380