keycloak - Keycloak 联合用户 - 在自定义 SPI 中触发密码重置电子邮件
问题描述
我们实现了一个 keycloak SPI 来对外部用户数据库执行查找/更新。
我们想要实现的功能之一是在用户达到一定数量的登录尝试时触发电子邮件。这是我们在应用程序的 pre-keycloak 版本中所做的事情,并试图实现此功能。
该指南是通过提供“UPDATE_PASSWORD”所需的操作以及其他输入来使用 execute-actions-email admin REST 端点。但我一直收到 403 响应。
如果在自定义 SPI 中有一种使用 Keycloak Java API 的方法,我正在环顾四周。我在 UserResource 中找到了 executeActionsEmail 方法的实现。但这需要一些额外的初始化(我认为主要是管理员权限)。我也被困在这里。
我正在寻找任何可以帮助我理解如何实现这个用例的工作示例。Postman,Java API 任何东西都会受到高度赞赏。
谢谢,
解决方案
这是最终的解决方案:
private boolean triggerExecuteActionsEmailAdminClient(RealmModel realm, UserModel user) {
boolean executed = false;
try {
KeycloakContext context = keycloakSession.getContext();
UriInfo backendUriInfo = context.getUri(UrlType.BACKEND);
String backendBaseUri = backendUriInfo.getBaseUri().toString();
log.info(String.format("backendBaseUri: %s", backendBaseUri));
Keycloak keycloak = KeycloakBuilder.builder().serverUrl(backendBaseUri).realm("master")
.clientId("admin-cli").grantType("password").username("admin").password("******")
.resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build()).build();
String realmName = realm.getName();
String userId = user.getId();
keycloak.realm(realmName).users().get(userId).executeActionsEmail(Arrays.asList("UPDATE_PASSWORD"));
executed = true;
} catch (Exception e) {
e.printStackTrace();
}
return executed;
}
<global-modules>
<module name="org.keycloak.keycloak-core"/>
<module name="org.keycloak.keycloak-admin-client"/>
</global-modules>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.springframework.security" />
<module name="com.oracledatabase.oracle" />
<module name="org.keycloak.keycloak-core"/>
<module name="org.keycloak.keycloak-server-spi"/>
<module name="org.keycloak.keycloak-server-spi-private"/>
<module name="org.keycloak.keycloak-services"/>
<module name="org.keycloak.keycloak-saml-core-public"/>
<module name="org.keycloak.keycloak-admin-client"/>
<module name="org.jboss.logging"/>
</dependencies>
</deployment>
安装 keycloak-admin-client 模块,确保 keycloak-admin-client-14.0.0.jar 在 /tmp 中可用
sudo $KEYCLOAK_HOME/bin/jboss-cli.sh --command="module add --name=org.keycloak.keycloak-admin-client --resources=/tmp/keycloak-admin-client-14.0.0.jar --dependencies=org.keycloak.keycloak-core,org.keycloak.keycloak-common,org.apache.httpcomponents,javax.ws.rs.api,org.jboss.resteasy.resteasy-jaxrs"
推荐阅读
- xpath - Xpath查询,让某个查询更通用
- networking - 如何让名称解析在 Ubuntu 19.04 VirtualBox VM 上工作?
- python - Python/Tkinter:使用按钮控制 for 循环
- scala - 将类型模式加工转换为类型类
- java - 考虑在你的配置中定义一个“redis.clients.jedis.JedisPool”类型的bean。集成 Redis Jedis 时出错
- prestashop - Prestashop 1.7 访问后台的问题
- javascript - 当事先不知道画布尺寸时,无法在正确位置绘制画布
- java - 如何在构建过程中仅列出 Gradle 中已解析的 runtimeClasspath 依赖项?
- reactjs - AWS Amplify - 如何在登录后呈现组件
- typescript - 在 Typescript 文件中导入 Firebase Analytics