2015-09-20 15 views
12

Trong dịch vụ còn lại của tôi có thể có được các thông tin chủ yếu sau khi xác thực sử dụngKeycloak lấy thuộc tính tuỳ chỉnh để KeycloakPrincipal

KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal(); 

tuyên bố.

Keycloak chính không giữ tất cả thông tin tôi cần về người dùng được xác thực. Có thể tùy chỉnh loại chính của tôi không? Trên keycloak-server-end, tôi đã phát triển một nhà cung cấp liên kết người dùng. Tôi thấy rằng UserModel làm cho có thể thêm một tập hợp các thuộc tính tùy chỉnh cho người dùng của tôi.

Có thể chèn mã tùy chỉnh của tôi vào mã đó không?

Có thể truy xuất thuộc tính này từ keycloak chính không?

Cách thức là gì?

+0

http://stackoverflow.com/questions/29014894/obtaining-user-roles-in-servlet-application-using-keycloak –

Trả lời

28

Để thêm tùy chỉnh các thuộc tính bạn cần phải làm ba việc:

  1. Thêm thuộc tính tới admin console
  2. Thêm ánh xạ tuyên bố
  3. Tiếp cận tuyên bố

Người đầu tiên được giải thích khá tốt tại đây: http://www.keycloak.org/docs/3.3/server_admin/topics/users/attributes.html

Thêm xác nhận quyền sở hữu ánh xạ:

  1. Mở bảng điều khiển quản trị của vương quốc của bạn.
  2. Tới Clients và mở ứng dụng của bạn
  3. chỉ này hoạt động cho Cài đặt> Truy cập Loại bí mật hoặc công cộng (không vô danh-only)
  4. Đến mappers
  5. Tạo một ánh xạ từ thuộc tính của bạn để JSON
  6. Kiểm tra "Add to ID thẻ"

tuyên bố truy cập:

final Principal userPrincipal = httpRequest.getUserPrincipal(); 

if (userPrincipal instanceof KeycloakPrincipal) { 

    KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) userPrincipal; 
    IDToken token = kp.getKeycloakSecurityContext().getIdToken(); 

    Map<String, Object> otherClaims = token.getOtherClaims(); 

    if (otherClaims.containsKey("YOUR_CLAIM_KEY")) { 
     yourClaim = String.valueOf(otherClaims.get("YOUR_CLAIM_KEY")); 
    } 
} else { 
    throw new RuntimeException(...); 
} 

Hy vọng điều này sẽ giúp và phù hợp với trường hợp sử dụng của bạn. Tôi đã sử dụng tính năng này cho thuộc tính tùy chỉnh mà tôi đã thêm với chủ đề tùy chỉnh.

+0

tôi có thể thể lấy id email, GivenName, Family Name.But không thể truy xuất thuộc tính tùy chỉnh trên thiết bị di động. Tôi đang nhận được OtherClaims với kích thước 0. –

+0

Mã của tôi là: KeycloakAuthenticationToken token = (KeycloakAuthenticationToken) yêu cầu. getUserPrincipal(); KeycloakPrincipal principal = (KeycloakPrincipal) token.getPrincipal(); IDToken idToken = principal.getKeycloakSecurityContext(). GetIdToken(); System.err.println ("size" + otherClaims.size() + idToken.getEmail() + idToken.getFamilyName()); –

+0

@SuryaMovva, bạn đã thêm ánh xạ vào bảng điều khiển quản trị keycloak trong ứng dụng khách đang sử dụng chưa? –

3
  • Chọn người dùng> Tra cứu> nhấp vào ID> chuyển đến tab thuộc tính> Thêm thuộc tính> ví dụ:: Điện thoại> Save enter image description here

  • Chọn Khách hàng> click vào ID Khách hàng> chuyển tới Mappers Tab> tạo mapper

    enter image description here

    enter image description here

    enter image description here

  • Nhận thuộc tính tuỳ chỉnh

    enter image description here

    enter image description here

+0

Cảm ơn @Neeraj Tôi đã làm những điều tương tự mà bạn vừa đăng. Vấn đề ở bên cạnh tôi là cache. Sau khi ánh xạ hoặc thuộc tính người dùng được thêm vào, tôi cần phải làm sạch bộ nhớ cache của bộ nhớ cache trong bộ điều khiển quản trị Keycloak. Sau đó, tôi cũng có thể thấy các thuộc tính trong các phần mềm khác. Hy vọng điều này sẽ giúp eerybody. – troger19

+0

@ troger19 Cảm ơn bạn đã bình luận này, tôi đã dành hàng giờ đồng hồ vì tôi không nghĩ về điều đó. – Neikius

+0

Cảm ơn bạn đã giải pháp. Có cách nào để áp dụng các thuộc tính tùy chỉnh cho tất cả người dùng không? Tôi đặc biệt cần thực hiện việc này cho tất cả người dùng của mình được nhập thông qua nhà cung cấp Ldap của tôi. – user1026498

Các vấn đề liên quan