尝试用JavaAPI重置red hat SSO7.3(keyClope)上的用户密码时出现错误400

sgtfey8w  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(182)

我试图通过JavaAPI在red hat single sign-on 7.3(keyClope幕后)上创建一个临时密码用户。
本地(使用标准keypose、jboss/keycloak:9.0.0 docker 图像),工作正常。但是在openshift 4.4项目中部署相同的组件时,我从red hat sso(7.3)中得到一个400错误。不幸的是,日志中没有这么多内容,我无法在red hat sso服务器上配置任何内容,使其更加详细。
在red hat sso服务器上,已经在应用程序领域中创建了一个专用的“key斗篷管理”客户端。启用客户端时,只有“启用服务帐户”选项处于启用状态。在“服务帐户角色”中,“领域管理”中的所有角色都已分配且有效。
我使用这个maven依赖来处理keyClope java api:

<dependency>
   <groupId>org.keycloak</groupId>
   <artifactId>keycloak-admin-client</artifactId>
   <version>9.0.0</version>
</dependency>

下面是我如何通过java代码创建与KeyClope的连接:

Keycloak keycloak = KeycloakBuilder.builder()
            .serverUrl(keycloakProperties.getHost())
            .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
            .realm("app_realm")
            .clientId("keycloak-admin")
            .clientSecret(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx)
            .resteasyClient(
                new ResteasyClientBuilder()
                    .connectionPoolSize(10).build()
            ).build();
keycloak.tokenManager().getAccessToken();
RealmResource realmResource = keycloak.realm("app_realm");

客户端密钥集与“凭证”部分中的“keydove admin”客户端中的密钥匹配。
下面是我如何通过java代码创建用户:

final UserRepresentation user = new UserRepresentation();
user.setEnabled(true);
user.setEmailVerified(true);
user.setUsername(username);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setEmail(email);

try {
   final Response response = realmResource.users().create(user);
   final String userId = CreatedResponseUtil.getCreatedId(response);
} catch (final Exception exception) {
   log.error("Exception when createKeycloakUser",exception);
}

这一部分在本地和红帽sso中工作良好。用户已创建,并且可以在keydrope上检索。
然后我试着像这样重置密码:

final UserResource userResource = realmResource.users().get(userId );

final CredentialRepresentation passwordCred = new CredentialRepresentation();
passwordCred.setTemporary(true);
passwordCred.setType(CredentialRepresentation.PASSWORD);
passwordCred.setValue(generateRandomPassword());
userResource.resetPassword(passwordCred);

GenerateAndomPassword是一种生成随机密码的方法,该密码与本地KeyClope和red hat sso(身份验证/密码策略)上定义的密码策略相匹配。
代码的最后一部分在本地运行良好,但我在red hat sso上遇到了400错误。
要知道,我也尝试直接用密码创建用户,但行为完全相同。我还尝试使用“admin cli”客户端和管理帐户连接到keydove,但问题仍然存在。
提前感谢您提供的所有帮助或建议!我被困在那,现在没有更多的想法。。。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题