java - keycloak:检查旧密码是否匹配,如果是则更改为另一个

标签 java keycloak

具有 maven 依赖项“keycloak-admin-cli”的 Java

我有这个代码:

  keycloakService.findUserByEmailOrUsername( user.getKeycloakUsername() )
                    .ifPresent( userRepresentation -> {
                        //Check for old password
                        if ( userRepresentation.getCredentials() != null ) {
                            for (CredentialRepresentation c : userRepresentation.getCredentials()) {
                                if ( CredentialRepresentation.PASSWORD.equals( c.getType() ) ) {
                                    if ( userDTO.getOldpassword().equals( c.getValue() ) ) {
                                        //Das alte Passwort stimmt mit dem in der Datenbank überein. Wir können updaten
                                        //Neues Passwort setzen
                                        CredentialRepresentation credential = new CredentialRepresentation();
                                        credential.setType( CredentialRepresentation.PASSWORD );
                                        credential.setValue( userDTO.getPassword() );
                                        credential.setTemporary( false );
                                        userRepresentation.setCredentials( Collections.singletonList( credential ) );
                                    } else {
                                        throw new RuntimeException( "Your current password does not match", null );
                                    }
                                }
                            }
                        }
                    } );

我检查了调试器,得到了正确的用户。 “userRepresentation”不为空。 但用户的凭据始终为空。

此外,如果我只想为用户设置一个新密码,它不会更新:

                keycloakService.findUserByEmailOrUsername( user.getKeycloakUsername() )
                    .ifPresent( userRepresentation -> {
                        CredentialRepresentation credential = new CredentialRepresentation();
                        credential.setType( CredentialRepresentation.PASSWORD );
                        credential.setValue( userDTO.getPassword() );
                        credential.setTemporary( false );
                        userRepresentation.setCredentials( Collections.singletonList( credential ) );
                    } );

我没有收到错误消息,keycloak 只是没有更新。

谁能告诉我如何检查旧密码并将其更改为另一个密码的示例?谢谢

最佳答案

尝试使用 UserResource 而不是 UserRepresentation。

userResource.get(userId).credentials() 而不是 userRepresentation.getCredentials() 应该可以工作,但感觉更像是一种解决方法。

自 2021 年 7 月 26 日起,getCredentials 始终返回 null。

关于java - keycloak:检查旧密码是否匹配,如果是则更改为另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64726445/

相关文章:

azure - 如何将 Microsoft 用户从 Azure 同步到 Keycloak

Keycloak 映射多个用户属性

Keycloak 发行者验证和 Multi-Tenancy 方法

node.js - 使用 Keycloak 保护 Electron 应用程序

ldap - 使用来自 ldap 的 sAMAcountName 作为用户名

java - 使用反射获取 Field 的通用类型

java - 如何右对齐 Horizo​​ntalPanel (GWT) 上的按钮

java - Autowired 类的 Cobertura 问题

java - 当我尝试倒计时时同步被阻塞

java - 如何使用 setExact 设置每周重复闹钟的日历时间?