Keycloak 密钥斗篷-要求用户在电子邮件验证后设置密码

Keycloak 密钥斗篷-要求用户在电子邮件验证后设置密码,keycloak,Keycloak,我们正在评估Key斗篷,以取代用户注册和身份验证的自定义实现 我们当前的工作流程提供了一个注册屏幕,用户可以在其中自行注册。提交注册表时,会触发自定义验证流,随后会向用户发送一封电子邮件以验证其电子邮件并激活其帐户。电子邮件中的链接允许他们设置密码,然后向他们发送欢迎电子邮件 我正在使用AdminREST客户端API来实现此工作流。我已经到了电子邮件验证部分 我的问题是: 在用户验证了他们的电子邮件后,我是否可以指示KeyClope向他们显示设置的密码屏幕 身份验证流-如果我正在编写此自定义工作

我们正在评估Key斗篷,以取代用户注册和身份验证的自定义实现

我们当前的工作流程提供了一个注册屏幕,用户可以在其中自行注册。提交注册表时,会触发自定义验证流,随后会向用户发送一封电子邮件以验证其电子邮件并激活其帐户。电子邮件中的链接允许他们设置密码,然后向他们发送欢迎电子邮件

我正在使用AdminREST客户端API来实现此工作流。我已经到了电子邮件验证部分

我的问题是:

  • 在用户验证了他们的电子邮件后,我是否可以指示KeyClope向他们显示设置的密码屏幕
  • 身份验证流-如果我正在编写此自定义工作流,那么通过管理控制台设置的注册身份验证流是否仍然适用

  • 调用用户创建API时,在凭证对象(auth/admin/realms/yourrealm/users)中设置temporary=true。 下面提到的JSON主体示例。然后,用户将在初始登录时重定向到KeyClope以更改密码

      {
        "createdTimestamp": 1587754061774,
        "username": "John",
        "enabled": true,
        "firstName": "John",
        "totp": false,
        "emailVerified": true,
        "disableableCredentialTypes": [],
        "requiredActions": [],
        "notBefore": 0,
        "groups": [],
        "credentials": [{
            "type":"password",
            "value":"1qaz@WSX",
            "temporary":true
        }],
        "access": {
            "manageGroupMembership": true,
            "view": true,
            "mapRoles": true,
            "impersonate": true,
            "manage": true
        }
    }
    
    谢谢你,沃尔特。。 对于其他可能需要它的人,我就是这样使用Java客户机的

            Keycloak keycloak = KeycloakBuilder.builder() 
                    .serverUrl(SERVER_URL) 
                    .realm(MASTER_REALM) 
                    .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
                    .clientId(CLIENT_ID) 
                    .clientSecret(CLIENT_SECRET) 
                    .build();       
            
            // Define user
            UserRepresentation user = new UserRepresentation();
            user.setEnabled(true);
            user.setUsername("first.last@gmail.com");
            user.setFirstName("First");
            user.setLastName("Last");
            user.setEmail("first.last@gmail.com");
            user.setAttributes(Collections.singletonMap("MRN", Arrays.asList("11111")));
            
            // Define password credential
            CredentialRepresentation passwordCred = new CredentialRepresentation();
            passwordCred.setTemporary(true);
            passwordCred.setType(CredentialRepresentation.PASSWORD);
            passwordCred.setValue("Password@1");
            
            user.setCredentials(Arrays.asList(passwordCred));
            
            // Get realm
            RealmResource realmResource = keycloak.realm(PHUB_REALM);
            UsersResource usersRessource = realmResource.users();
    
            // Create user (requires manage-users role)
            Response response = usersRessource.create(user);
            String userId = CreatedResponseUtil.getCreatedId(response);
            System.out.println("Response: " + response.getStatusInfo());
            System.out.println(userId);
            
            UserResource u = realmResource.users().get(userId);
            u.sendVerifyEmail();