2013-04-29 31 views
8

Vì một vài ngày tôi đang cố gắng kích hoạt SSO cho Jira 5.2 và đã tìm ra, trang trợ giúp từ Jira đã lỗi thời.Jira 5.2 Seraph SSO Đăng nhập sau proxy ngược

Mỗi ví dụ sử dụng phiên bản cũ của atlassian-seraph (Jira 5.2 sử dụng 2.6.0).

Mục tiêu: Tôi muốn đăng nhập tự động vào Jira nếu tôi đăng nhập vào Webseal (proxy ngược).

Bối cảnh:

sequence diagram

  • Jira là sau một proxy ngược (xem hình).
  • Proxy này xác thực người dùng và giữ phiên.
  • Nếu tôi đăng nhập Tôi muốn đăng nhập trong Jira, quá
  • Thông tin duy nhất được cung cấp là tên người dùng

Câu hỏi:

Làm thế nào để viết một tên đăng nhập tùy chỉnh mô-đun đọc tên người dùng từ http_header và xác thực người dùng?

Links:

Trả lời

11

Cuối cùng tôi figured it out bởi bản thân mình:

  1. Bạn cần một tùy chỉnh xác thực

    public class MyCustomAuthenticator extends DefaultAuthenticator { 
    
        protected boolean authenticate(Principal user, String password) 
        throws AuthenticatorException { 
        return true; 
        } 
    
        protected Principal getUser(String username) { 
        return getCrowdService().getUser(username); 
        } 
    
        private CrowdService getCrowdService() { 
        return (CrowdService)ComponentManager.getComponent(CrowdService.class); 
        } 
    } 
    
  2. Thêm MyCustomAuthenticator để Seraph-config.xml

    <authenticator class="com.company.jira.MyCustomAuthenticator"/> 
    
  3. Viết một bộ lọc tùy chỉnh để thiết lập tên người dùng từ http-header

    public class CustomFilter extends PasswordBasedLoginFilter { 
    
        @Override 
        protected UserPasswordPair extractUserPasswordPair(
         HttpServletRequest request) { 
         String username = request.getHeader("iv-header"); 
    
         if (username != null && username.trim().length() != 0) { 
          return new PasswordBasedLoginFilter.UserPasswordPair(
           username, "DUMMY", false); 
         } 
         return null; 
        } 
    } 
    

  4. Thay lọc trong web. xml

    <filter> 
        <filter-name>login</filter-name> 
        <filter-class>com.company.jira.CustomFilter</filter-class> 
    </filter> 
    

Những nhân jar cần thiết cho Jira 5,2

  • nhúng đám đông-api-2.6.2
  • jira-core-5.2.1
  • Atlassian-seraph-2.6.0
+1

Thực hiện tốt (+1)! – Michael

+0

@Tobias: Câu trả lời của bạn liên quan đến CustomFilter rất hữu ích ... Tôi cũng đang triển khai trình xác thực Jira Custom để sử dụng sau proxy ngược SAML-SSO và đó là phần tôi cần để trích xuất tiêu đề xác thực HTTP. Nhưng - trong việc thực hiện getUser() của bạn, bạn sử dụng API Crowd. Tôi tò mò, bạn đang sử dụng điều này một cách tổng quát, để tự động lấy người dùng từ yêu cầu HTTP, hay bạn đang sử dụng Đám đông trên bảng cho SSO? Tôi không sử dụng Đám đông, nhưng rất thích có thể kéo người dùng theo cách đó nếu có thể, vì nó rất tiện lợi. – danzvash

+0

@danzvash: Tôi chỉ sử dụng dịch vụ đám đông để xác thực người dùng (Chính). Tôi không sử dụng bất kỳ dịch vụ đám đông bổ sung nào chỉ là api đã tồn tại, bởi vì việc tạo ra hiệu trưởng của riêng bạn có thể thực sự khó khăn. Tôi là curios nếu tôi hiểu câu hỏi của bạn?! :) –

1

Tôi không quen thuộc với xác thực Jira, nhưng tôi hiểu tốt SiteMinder/WebSeal xác thực.

Cả hai hệ thống đều xác thực người dùng và gửi tên người dùng trong tiêu đề HTTP. Tên của tiêu đề HTTP có thể được định cấu hình. Ngoài ra, họ có thể gửi các thuộc tính người dùng bổ sung, như email người dùng trong các tiêu đề HTTP bổ sung. ĐỂ xác thực người dùng phía sau SiteMinder/WebSeal, chỉ cần lấy tiêu đề HTTP và tạo phiên ứng dụng bằng tên người dùng từ tiêu đề.

Bạn chắc chắn có thể giải quyết nó trong Jira. Bạn có 2 lựa chọn:

  1. Để sử dụng đã tạo SiteMinder xác thực: https://confluence.atlassian.com/display/DEV/SiteMinder+Custom+Seraph+Authenticator+for+Confluence Vấn đề mà tôi không tìm thấy làm thế nào để cấu hình tên tiêu đề HTTP cho tiêu đề tên người dùng. Nó giả định rằng tên tiêu đề là uid Bạn cần định cấu hình tiêu đề uid trong WebSeal hoặc cố gắng lấy nguồn và đặt tên tiêu đề có thể định cấu hình.
  2. Thực hiện xác thực của riêng bạn theo liên kết của bạn: http://docs.atlassian.com/atlassian-seraph/latest/sso.html Lấy tên người dùng sử dụng mã httpServletRequest.getHeader(userNameHeaderName);
+0

Đọc tên người dùng từ tiêu đề HTTP không phải là vấn đề, nếu thực hiện một Plugin SSO cho JBoss trước đây. Rất tiếc, ví dụ từ Tùy chọn 2 của bạn đã lỗi thời và tôi chưa tìm thấy bất kỳ tài liệu thực tế nào. Nhưng tôi chắc chắn sẽ chọn tùy chọn thanh toán 1. –

+0

Tôi đã chọn tùy chọn 1 và nó không giúp tôi. –

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