【发布时间】:2019-10-02 12:19:21
【问题描述】:
我的问题是:在 Keycloak Admin REST API 中,当执行诸如 execute-actions-email 之类的电子邮件操作时,我如何确保电子邮件中使用的 URL 使用特定的主机名。
情况:
- Keycloak 在 Docker 中运行,并在 https://somehost.test/auth 上公开提供。在 Docker 中,http://keycloak 用作 URL
- 另一个容器使用 Java Admin Client(它使用 REST API)来请求数据并执行更改。使用的 URL 是内部 URL,这很好用。
- 仅在请求发送电子邮件时,链接始终显示 API 客户端已使用的 url,即使普通用户无法访问。
我想要什么:
- url应该改成外部url,已经在Keycloak中配置为客户端的root url。
我尝试了什么:
- 向呼叫提供客户端 ID,这根本没有帮助。
- 正在修改电子邮件模板 (keycloak/themes/base/email/text/executeActions.ftl),但它会生成消息,我对此无能为力。
- 设置一个自定义 RestEasyClient 来设置标题(没有帮助)
requestContext.getHeaders().add("X-Forwarded-For", "http://test.test.test");
requestContext.getHeaders().add("X-Forwarded-Host", "http://test.test.test");
requestContext.getHeaders().add("Host", "http://test.test.test");
无论如何,用户在电子邮件中收到的 url 是 http://keycloak。如果我更改 Java Admin Client 用于联系其余 API 的 url,电子邮件中的 url 也会更改。这适用于我的本地环境,但出于安全原因,生产环境的策略不允许这样做。我无权更改该政策。
我了解到我可以为 Admin REST API 创建一个自定义端点。如果可能,我宁愿避免这种情况,因为这意味着我必须重新发明轮子。
我希望你们中的任何人都可以提供帮助。提前致谢。
【问题讨论】:
-
您可以在配置中硬编码 Keycloak URL。检查这个stackoverflow.com/questions/56709461/…
-
感谢您的快速回复。如果这能成功,那就太好了,所以我会先尝试一下。