2017-03-27 18 views
1

新しいユーザーとロールの両方をキークローズに挿入しました。しかし、どのように私はユーザーとロールのようなユーザーとロールエンティティを接続することができますKeycloakはユーザーロールを作成します

Keycloak kc = KeycloakBuilder.builder() 
       .serverUrl("http://localhost:8080/auth") 
       .realm("master") 
       .username("admin") 
       .password("admin") 
       .clientId("admin-cli") 
       .resteasyClient(
        new ResteasyClientBuilder() 
         .connectionPoolSize(10).build() 
       ).build(); 
//creating role 
RoleRepresentation roleRepresentation = new RoleRepresentation(); 
     roleRepresentation.setName("latest_role"); 
     kc.realm("master").roles().create(roleRepresentation); 
//creating user 
UserRepresentation user = new UserRepresentation(); 
     user.setUsername("anoop"); 
     user.setFirstName("anoop"); 
     user.setLastName("anoop"); 
     user.setEnabled(true); 
     user.setCredentials(Arrays.asList(credential)); 
     kc.realm("master").users().create(user); 

答えて

0
UserRepresentation user = new UserRepresentation(); 
    user.setEmail("[email protected]"); 
    user.setUsername("naveenm555"); 
    user.setFirstName("naveen"); 
    user.setLastName("m"); 
    user.setEnabled(true); 
    Response response = kc.realm("appscook").users().create(user); 
    System.out.println("user created.... verify in keycloak!"); 
    String userId = getCreatedId(response); 

    UserResource userResource=kc.realm("appscook").users().get(userId); 
    CredentialRepresentation newCredential = new CredentialRepresentation(); 
    newCredential.setType(CredentialRepresentation.PASSWORD); 
    newCredential.setValue("naveenm555"); 
    newCredential.setTemporary(false); 
    userResource.resetPassword(newCredential); 
    System.out.println("role created."); 

このコードは、新しいユーザーを作成してユーザーに役割を設定します。それはユーザーがログインできるようになります。上記のコードは、作成後にユーザーがログインすることを許可しません。

2

これは些細な問題ではないようです。通常、私はこの機能がthis exampleのようにuser.setRealmRoles(roleRepresentation)にあると考えています。しかし、それは私のために働いていませんでした。

代わりに、この機能を使用してをuserに追加しました。

RoleRepresentation savedRoleRepresentation = kc.realm("master").roles() 
     .get("latest_role").toRepresentation(); 
kc.realm("master").users().get(userId).roles().realmLevel() 
     .add(asList(savedRoleRepresentation)); 

完全なコード:

Keycloak kc = Keycloak.getInstance("http://localhost:8080/auth", 
     "master", "admin", "admin", "admin-cli"); 

RoleRepresentation roleRepresentation = new RoleRepresentation(); 
roleRepresentation.setName("latest_role"); 
kc.realm("Test").roles().create(roleRepresentation); 

UserRepresentation user = new UserRepresentation(); 
user.setUsername("test"); 
user.setFirstName("test"); 
user.setLastName("test"); 
user.setEnabled(true); 
user.setCredentials(Arrays.asList(credential)); 

Response response = kc.realm("Test").users().create(user); 
String userId = getCreatedId(response); 

System.out.println("Testuser created.... verify in keycloak!"); 

RoleRepresentation savedRoleRepresentation = kc.realm("Test").roles() 
     .get("latest_role").toRepresentation(); 
kc.realm("Test").users().get(userId).roles().realmLevel() 
     .add(asList(savedRoleRepresentation)); 


private String getCreatedId(Response response) { 
    URI location = response.getLocation(); 
    if (!response.getStatusInfo().equals(Response.Status.CREATED)) { 
     Response.StatusType statusInfo = response.getStatusInfo(); 
     throw new WebApplicationException("Create method returned status " + 
       statusInfo.getReasonPhrase() + " (Code: " + statusInfo.getStatusCode() + "); expected status: Created (201)", response); 
    } 
    if (location == null) { 
     return null; 
    } 
    String path = location.getPath(); 
    return path.substring(path.lastIndexOf('/') + 1); 
} 

EDIT:

資格情報は、ユーザー用に保存されていないように思えます。それらを保存するためにkeycloakを強制するには、あなたがパスワードをリセットする必要があります。

UserResource userResource = kc.realm("Test").users().get(userId); 
userResource.resetPassword(credential); 
+0

ユーザーを作成した後、keycloakはログインできません。無効なユーザー名/パスワードを示しています。 – boycod3

関連する問題