Keycloak联邦用户-触发密码重置电子邮件在自定义SPI



我们实现了一个keycloak SPI在外部用户数据库上执行查找/更新。

我们想实现的功能之一是当用户达到一定次数的登录尝试时触发一封电子邮件。这是我们在应用程序的前keycloak版本中所做的事情,并试图实现此功能。

指南是通过提供"UPDATE_PASSWORD"来使用execute-actions-email admin REST端点。所需的行动以及其他输入。但是我总是得到403响应。

我正在寻找如果在自定义SPI有一种方法来使用Keycloak Java API代替。我在UserResource中找到了executeActionsEmail方法的实现。但这需要一些额外的初始化(我认为主要是管理员权限)。我也被困在这里了。

我正在寻找任何工作的例子,这将有助于我理解如何实现这个用例。邮差,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;
}
jboss:domain:ee子系统中的standalone.xml
<global-modules>
<module name="org.keycloak.keycloak-core"/>
<module name="org.keycloak.keycloak-admin-client"/>
</global-modules>
代替上述内容,我在安装的自定义SPI jar文件的jboss部署描述符中添加了依赖项
<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模块,确保/tmp目录下有keycloak-admin-client-14.0.0.jar

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"

相关内容

最新更新