将密码存储在Keycloak中

问题描述 投票:0回答:2

我创建了一个自定义用户存储提供程序,可以根据需要将用户从旧系统迁移到keycloak的本地存储。

迁移用户的所有详细信息都存储在除密码之外的Keycloak中。

userModel.setEmail(email);
userModel.setEnabled(isEnabled);
userModel.setEmailVerified(isEmailVerified);
userModel.setFirstName(firstName);
userModel.setLastName(lastName);

我使用上面的代码来存储用户的所有信息,但我没有找到任何存储密码的方法/类。

有人可以帮我吗?

附:我使用的是Keycloak-3.3.0-Final版本。

passwords migration store keycloak
2个回答
0
投票

您可以使用

session.userCredentialManager().updateCredential(realm, user, UserCredentialModel.password(passwordNew, false));

其中session是您在自定义用户存储提供程序中可以访问的当前KeycloakSession。


0
投票

感谢Boomer的回答,我设法让它在我的实现中工作,其中isValid函数 - 发送POST请求以验证密码 - 需要触发Keycloak数据库中的密码更新。

@Override
public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) {
  if (!supportsCredentialType(input.getType()) || !(input instanceof UserCredentialModel)) return false;

  UserCredentialModel cred = (UserCredentialModel)input;
  // sending a POST request
  Response response = userService.validateLogin(user.getUsername(), new EventivalUserCredentialsDto(cred.getValue()));

  boolean isValid = HttpStatus.SC_OK == response.getStatus();

  if (isValid) {
    // save the password to local (keycloak's native) database
    session.userCredentialManager().updateCredential(realm, user, cred);
    // unset the federation link to never ask again - Import Implementation Strategy
    user.setFederationLink(null);
  }

  return isValid;
}
© www.soinside.com 2019 - 2024. All rights reserved.