Keycloak 在重置密码电子邮件中添加公司徽标

jav*_*mat 5 html java keycloak

我正在尝试在重置密码电子邮件中显示公司徽标。我已经检查了 keycloak 文档,发现它们不支持它。我还尝试将图像编码为 base64,但 Gmail 不支持。我怎样才能做到这一点?

Ari*_*era 4

您需要创建一个自定义主题。检查 Keycloak 的文档第 3 章:文档

有五种类型的主题/页面:

  • 账户 - 账户管理
  • 管理员 - 管理控制台
  • 电子邮件 - 电子邮件
  • 登录 - 登录表格
  • 欢迎 - 欢迎页面

您可以首先签出此示例存储库kc 主题示例,编辑模板并将其部署到您的 keycloak 中。

就像链接所说...部署它:

复制

部署主题的最简单方法是将 src/main/resources/theme/* 复制到主题/。

模块

或者,您可以部署为模块。这可以通过首先运行来完成:

mvn clean install $KEYCLOAK_HOME/bin/jboss-cli.sh --command="module add --name=org.keycloak.example.themes --resources=target/keycloak-example-themes.jar"

然后standalone/configuration/standalone.xml 通过添加以下内容打开并注册主题模块:

<theme>
    ...
    <modules>
        <module>org.keycloak.example.themes</module>
    </modules>
</theme>
Run Code Online (Sandbox Code Playgroud)

您可以复制其他主题或将其从基本模板复制到自定义主题项目。

电子邮件基本模板:电子邮件模板

在签出项目和源之前,请注意选择相同的 Keycloak 版本。

将徽标添加到现有自定义主题内的电子邮件模板的步骤

  1. 找到您的模板文件:/html/password-reset.ftl(例如基本示例文件

<theme>
    ...
    <modules>
        <module>org.keycloak.example.themes</module>
    </modules>
</theme>
Run Code Online (Sandbox Code Playgroud)

  1. 替换为您的代码。例如,使用 base64 图像或对图像文件的链接引用(https://static.myserver.com/image.png等...)

    <html>
    <body>
    ${kcSanitize(msg("passwordResetBodyHtml",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration)))?no_esc}
    </body>
    </html>
Run Code Online (Sandbox Code Playgroud)

  1. 也更新您的纯文本模板(如果您需要,因为并非所有客户端都支持 html)。您无法在此处添加图像,但如果有短信 [file text/password-reset.ftl]

  2. 在 Keycloak 中打包并部署您的主题

  3. 在“领域配置”选项卡中选择您的电子邮件模板

正如您在类DefaultEmailSenderProvider.java中看到的那样,Keycloak 将尝试发送 HTML 电子邮件,如果您没有定义它,它将使用 text-plain (文件:text/password-reset.ftl

更新:

目前,某些电子邮件客户端施加了一些限制。我建议您阅读以下有关它的注释(读我)。

正如它所说,许多 Web 客户端不会显示包含多个嵌入 Base64 图像的电子邮件(或不显示任何图像)。

因此,使用 Keycloak 电子邮件的一个好策略是使用对静态内容服务器提供的图像的引用(如果您没有其中之一,则 keycloak 位于也可以配置为静态服务器的 Wildfly 上)。

因此,您可以实施的最佳解决方案是按如下方式添加图像:例如。

<img src = "https://static.myserver.com/static/logo.png" alt = "img" />
Run Code Online (Sandbox Code Playgroud)