簡體   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