我正在尝试从 keycloak 后端验证用户用户名和密码,因为我有一个自定义身份验证表单。我使用下面的代码来验证用户,它按预期工作。
private UserModel getUserByUserNameAndPassword(AuthenticationFlowContext context, String username,
String password) {
RealmModel realm = context.getRealm();
UserModel user = context.getSession().users().getUserByUsername(realm, username);
if (user != null) {
context.setUser(user);
context.success();
}
return user;
}
但我无法验证该用户的密码。有人可以帮我使用密码来验证用户吗?
提前致谢。
您在实施过程中可能面临的主要问题是您试图将明文密码与经过哈希处理和加盐处理的密码进行比较。
UserModel
,您就可以访问用户的 CredentialManager (credentialManager()
),它应返回 SubjectCredentialManager
的实例。
有了这个
CredentialManager
,您应该能够调用 isValid
方法 - 所需的 CredentialInput
可以通过 PasswordUserCredentialModel.password(String password)
创建。
这可能会导致类似的结果(集成测试的片段) [来源]:
UserProvider userProvider = session.getProvider(UserProvider.class);
UserModel user = userProvider.getUserByUsername(userName, realm);
return userProvider.validCredentials(session, realm, user, UserCredentialModel.password(password));