繁体   English   中英

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

[英]keycloak: check if old password matches, if so change to another one

具有 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 只是没有更新。

任何人都可以向我展示如何检查旧密码并将其更改为另一个密码的示例吗? 谢谢

对于更新密码使用:

userRessource.get(userId).resetPassword(credential);

看这个例子: https : //gist.github.com/thomasdarimont/0c136d0b8d339b997928e9bef225f941

但是为了检查实际凭证,我没有设法检查是否有凭证,正如您所说的 userRepresentation.getCredentials() 始终为空,即使在重置新密码之后也是如此。

尝试使用 UserResource 而不是 UserRepresentation。

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

截至 2021 年 7 月 26 日,getCredentials 始终返回 null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM