Passwords 将密码存储在密钥斗篷中

Passwords 将密码存储在密钥斗篷中,passwords,migration,store,keycloak,Passwords,Migration,Store,Keycloak,我已经创建了一个自定义用户存储提供商,它将根据需要将用户从遗留系统迁移到Key斗篷的本地存储 除密码外,已迁移用户的所有详细信息都存储在KeyClope中 userModel.setEmail(email); userModel.setEnabled(isEnabled); userModel.setEmailVerified(isEmailVerified); userModel.setFirstName(firstName); userModel.setLastName(lastName);

我已经创建了一个自定义用户存储提供商,它将根据需要将用户从遗留系统迁移到Key斗篷的本地存储

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

userModel.setEmail(email);
userModel.setEnabled(isEnabled);
userModel.setEmailVerified(isEmailVerified);
userModel.setFirstName(firstName);
userModel.setLastName(lastName);
我使用上面的代码来存储用户的所有信息,但是我没有找到任何存储密码的方法/类

userModel.setEmail(email);
userModel.setEnabled(isEnabled);
userModel.setEmailVerified(isEmailVerified);
userModel.setFirstName(firstName);
userModel.setLastName(lastName);
谁能帮我一下吗

另外,我正在使用KeyClope-3.3.0-Final版本。

您可以使用

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

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

多亏了Boomer的回答,我成功地在我的实现中实现了isValid功能,它发送验证密码的POST请求,需要触发KeyClope数据库中的密码更新

@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;
}

一旦用户尝试登录,我将尝试从KeyClope登录页面检索密码。我无法使用下面的行获取密码。感谢您的帮助。session.userCredentialManager.getStoredCredentialsrealm,用户;我可以使用UserModel从登录页面检索用户名/电子邮件。