将密码存储在 Keycloak 中

Store password in Keycloak

我创建了一个自定义用户存储提供程序,它将按需将用户从遗留系统迁移到 keycloak 的本地存储。

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

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

我正在使用上面的代码来存储用户的所有信息,但是我没有找到任何存储密码的method/class。

有人可以帮我吗?

P.S。我正在使用 Keycloak-3.3.0-Final 版本。

您可以使用

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

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

感谢 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;
}