Jira 5.2 Seraph SSO Login через обратный прокси

Уже несколько дней я пытаюсь включить SSO для Jira 5.2 и выяснил, что справочная страница Jira устарела.

В каждом примере используется старая версия atlassian-seraph (Jira 5.2 использует 2.6.0).

Цель: я хочу автоматически входить в Jira, если я вошел в Webseal (обратный прокси).

Справочная информация:

диаграмма последовательности

  • Jira находится за обратным прокси (см. Рисунок).
  • Этот прокси-сервер аутентифицирует пользователя и проводит сеанс.
  • Если я вошел в систему, я тоже хочу войти в Jira
  • Единственная предоставленная информация - это имя пользователя.

Вопрос:

Как написать собственный модуль входа в систему, который считывает имя пользователя из http_header и аутентифицирует пользователя?

Ссылки:


person Tobias Sarnow    schedule 29.04.2013    source источник
comment
Authentifritata   -  person Ash    schedule 10.01.2019


Ответы (2)


В конце концов, я разобрался сам:

  1. Вам нужен собственный аутентификатор

    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. Добавьте MyCustomAuthenticator в seraph-config.xml

    <authenticator class="com.company.jira.MyCustomAuthenticator"/>
    
  3. Напишите собственный фильтр, чтобы установить имя пользователя из 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. Replace the filter within the web.xml

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

Эти jar-файлы необходимы для Jira 5.2.

  • встроенный-толпа-api-2.6.2
  • jira-core-5.2.1
  • атласский-серафим-2.6.0
person Tobias Sarnow    schedule 22.05.2013
comment
@Tobias: Ваш ответ, связанный с CustomFilter, был очень полезен ... Я также реализую пользовательский аутентификатор Jira для использования за обратным прокси-сервером SAML-SSO, и это было то, что мне нужно для извлечения HTTP-заголовка аутентификации. Но - в вашей реализации getUser () вы используете Crowd API. Мне любопытно, используете ли вы это в общем, чтобы автоматически захватить пользователя из HTTP-запроса, или вы используете Crowd для единого входа? Я не использую Crowd, но хотел бы иметь возможность привлекать пользователя таким образом, если это возможно, поскольку это очень удобно. - person danzvash; 18.07.2013
comment
@danzvash: Я просто использую крауд-сервис для проверки пользователя (принципала). Я не использую никаких дополнительных сервисов Crowd, только уже существующий api, потому что создание собственного принципала может быть очень сложной задачей. Мне любопытно, понял ли я ваш вопрос ?! :) - person Tobias Sarnow; 19.07.2013

Я не знаком с аутентификацией Jira, но хорошо разбираюсь в аутентификации SiteMinder / WebSeal.

Обе системы аутентифицируют пользователя и отправляют имя пользователя в заголовке HTTP. Имя заголовка HTTP можно настроить. Кроме того, они могут отправлять дополнительные свойства пользователя, такие как адрес электронной почты пользователя в дополнительных заголовках HTTP. Для аутентификации пользователя за SiteMinder / WebSeal необходимо просто взять заголовок HTTP и создать сеанс приложения, используя имя пользователя из заголовка.

Вы определенно можете решить это в Jira. У вас есть 2 варианта:

  1. Чтобы использовать уже созданный аутентификатор SiteMinder: https://confluence.atlassian.com/display/DEV/SiteMinder+Custom+Seraph+Authenticator+for+Confluence Проблема в том, что я не нашел, как настроить имя заголовка HTTP для заголовка имени пользователя. Предполагается, что имя заголовка - uid. Вам нужно настроить заголовок uid в WebSeal или попытаться получить источники и сделать имя заголовка настраиваемым.
  2. Реализуйте свой собственный аутентификатор по вашей ссылке: http://docs.atlassian.com/atlassian-seraph/latest/sso.html Получите имя пользователя с помощью кода httpServletRequest.getHeader(userNameHeaderName);
person Michael    schedule 29.04.2013
comment
Чтение имени пользователя из HTTP-заголовка не является проблемой, если раньше это было сделано с помощью подключаемого модуля SSO для JBoss. К сожалению, пример из вашего варианта 2 устарел, и я не нашел никакой актуальной документации. Но я обязательно проверю вариант 1. - person Tobias Sarnow; 29.04.2013
comment
Я проверил вариант 1, и он мне не помог. - person Tobias Sarnow; 21.05.2013