首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keycloak:检查旧密码是否匹配,如果匹配,则更改为其他密码

keycloak:检查旧密码是否匹配,如果匹配,则更改为其他密码
EN

Stack Overflow用户
提问于 2020-11-07 17:56:06
回答 2查看 527关注 0票数 1

带有maven依赖项的Java "keycloak-admin-cli“

我有这样的代码:

代码语言:javascript
复制
  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“不为空。但用户的凭据始终为空。

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

代码语言:javascript
复制
                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就是没有更新。

谁能给我举个例子,如何检查旧密码并将其更改为另一个密码?thx

EN

回答 2

Stack Overflow用户

发布于 2021-07-26 13:35:03

尝试使用UserResource而不是UserRepresentation。

应该可以使用userResource.get(userId).credentials()而不是userRepresentation.getCredentials(),但它确实感觉更像是一种变通方法。

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

票数 2
EN

Stack Overflow用户

发布于 2020-11-10 17:38:12

要更新密码,请使用:

代码语言:javascript
复制
userRessource.get(userId).resetPassword(credential);

请参阅此示例:https://gist.github.com/thomasdarimont/0c136d0b8d339b997928e9bef225f941

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64726445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档