2013-04-29 11 views
8

Od kilku dni próbuję włączyć SSO dla Jira 5.2 i odkryłem, że strona pomocy Jiry jest nieaktualna.Jira 5.2 Seraph SSO Zaloguj się za odwrotnym proxy

Każdy przykład wykorzystuje starą wersję atlasassa-serafina (Jira 5.2 używa wersji 2.6.0).

Cel: Chcę zostać automatycznie zalogowany na konto Jira, jeśli jestem zalogowany w Webseal (reverse proxy).

Tło:

sequence diagram

  • Jira jest za reverse proxy (patrz rysunek).
  • Ten serwer proxy uwierzytelnia użytkownika i wstrzymuje sesję.
  • Jeśli jestem zalogowany Chcę być zalogowany Jira, zbyt
  • Jedyne informacje są nazwy użytkownika

Pytanie:

Jak napisać niestandardowy logowanie moduł, który odczytuje nazwę użytkownika z http_header i uwierzytelnia użytkownika?

Linki:

Odpowiedz

11

w końcu zorientowaliśmy się sam:

  1. trzeba niestandardowy uwierzytelnienie

    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. Dodaj MyCustomAuthenticator do Serafin-config.xml

    <authenticator class="com.company.jira.MyCustomAuthenticator"/> 
    
  3. Napisz Filtr niestandardowy, aby ustawić nazwę użytkownika z nagłówka HTTP

    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. Wymiana filtra w internecie. xml

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

Słoiki te są potrzebne do Jira 5,2

  • osadzony-tłum API 2.6.2
  • jira rdzeń-5.2.1
  • Atlassiana-seraf-2.6.0
+1

Dobra robota (+1)! – Michael

+0

@Tobias: Twoja odpowiedź z użyciem programu CustomFilter była bardzo pomocna ... Wprowadzam również autentykator Jira Custom do użytku za odwrotnym proxy SAML-SSO, i to był fragment, którego potrzebowałem do wyodrębnienia nagłówka HTTP auth. Ale w twojej implementacji getUser() używasz API Crowd. Ciekawi mnie, czy używasz tego w sposób ogólny, aby automatycznie pobrać użytkownika z żądania HTTP, czy też używasz Tłumów na całym forum do SSO? Nie używam Tłumu, ale chciałbym móc wciągnąć użytkownika w ten sposób, jeśli to możliwe, ponieważ jest to wygodne. – danzvash

+0

@danzvash: Po prostu używam usługi tłumu, aby zweryfikować użytkownika (głównego). Nie używam żadnej dodatkowej usługi tłumu, tylko api, która już istnieje, ponieważ stworzenie własnego zleceniodawcy może być naprawdę trudne. Jestem ciekawostką, jeśli rozumiem twoje pytanie?! :) –

1

nie jestem zaznajomiony z uwierzytelnianiem Jira, ale rozumiem dobrze/webseal uwierzytelniania SiteMinder.

Oba systemy uwierzytelniają użytkownika i wysyłają nazwę użytkownika w nagłówku HTTP. Można skonfigurować nazwę nagłówka HTTP. Ponadto mogą wysyłać dodatkowe właściwości użytkownika, takie jak adres e-mail użytkownika w dodatkowych nagłówkach HTTP. ABY uwierzytelnić użytkownika za SiteMinder/WebSeal, wystarczy pobrać nagłówek HTTP i utworzyć sesję aplikacji przy użyciu nazwy użytkownika z nagłówka.

Zdecydowanie możesz rozwiązać to w Jira. Masz 2 opcje:

  1. Aby korzystać już utworzony SiteMinder Authenticator: https://confluence.atlassian.com/display/DEV/SiteMinder+Custom+Seraph+Authenticator+for+Confluence problem, że nie mogę znaleźć jak skonfigurować nazwę nagłówka HTTP w nagłówku nazwę użytkownika. Zakłada się, że nazwa nagłówka to uid Należy skonfigurować nagłówek uid w aplikacji WebSeal lub spróbować uzyskać źródła i ustawić nazwę nagłówka do konfiguracji.
  2. zaimplementować własną Authenticator według linku: http://docs.atlassian.com/atlassian-seraph/latest/sso.html uzyskać nazwę użytkownika za pomocą kodu httpServletRequest.getHeader(userNameHeaderName);
+0

Odczytywanie nazwy użytkownika z nagłówka HTTP nie jest problemem, jeśli wcześniej wykonano wtyczkę SSO dla JBoss. Niestety przykład z Opcji 2 jest nieaktualny i nie znalazłem żadnej aktualnej dokumentacji. Ale na pewno kupę opcji 1. –

+0

Sprawdziłem opcję 1 i to mi nie pomogło. –

Powiązane problemy