Прозрачная аутентификация в Redmine

    Сегодняшний пост будет про удобство использования Redmine в корпоративной среде, а если быть точнее, про прозрачную авторизацию пользователей Redmine в домене Microsoft Active Directory.

    Мы используем Redmine как единую информационную среду, в которой работают все сотрудники компании. Вводить один и тот же пароль дважды — это всегда неудобно. Поэтому, мы настроили прозрачную аутентификацию через домен.





    Прозрачная аутентификация


    Во-первых, в самом Redmine есть прекрасная возможность авторизации через LDAP (Active Directory является надстройкой над LDAP). Заполнив небольшое количество полей, можно быстро получить возможность аутентифицировать пользователей в домене, и даже, создавать их налету. Эта функция избавляет администратора от необходимости заводить каждого нового пользователя.



    Но проблема в том, что у среднестатистического пользователя, впервые пришедшего в компанию, моментально возникает вопрос «Какой пароль вводить?». Этот вопрос, как правило, оттягивает влияние специалистов. Поэтому, мы написали небольшой плагин (надстройку над родным механизмом аутентификации Redmine) – SSO (Single sign-on) .

    Основная функция плагина в том, чтобы взять из серверной переменной логин пользователя и в случае совпадения этого логина с базой пользователей Redmine, прозрачно аутентифицировать пользователя или создать его, а затем аутентифицировать, если логин не был найден.

    Таким образом, все новые пользователи избавляются от необходимости вводить логин и пароль. Все что им нужно – это открыть ярлык на рабочем столе, и они сразу попадают в корпоративную среду.

    Как настраивать на стороне сервера


    Что собственно делать, чтобы логин авторизованного пользователя появился в серверной переменной? Мы в качестве web-сервера используем Apache. Основная причина, по которой мы не переходим на Ngnix – это отсутствие стабильного модуля NTLM-аутентификации в домене Windows.

    Может кто-то сможет подсказать его?

    В Apache все настраивается довольно просто. Нужно скачать и скомпилировать модуль NTLM-аутентификации. О том, как это сделать, я подробно писал в своей первой статье, там же описаны некоторые глюки работы данного модуля: habrahabr.ru/company/monandco/blog/198496

    Как настраивать на стороне клиента


    Чтобы прозрачная аутентификация работала корректно, браузер клиента должен передавать на север определенную информацию. По умолчанию, браузеры этого не делают и вылетает окошко с просьбой ввести доменный логин и пароль (но нам этого не нужно).

    Firefox
    Нужно в строке URL набрать «about:config»
    Найти параметр «network.automatic-ntlm-auth.trusted-uris» и добавить в него ваш домен.



    Chrome и IE
    Нужно добавить домен в доверенную зону.



    И поменять настройки для доверенной зоны.



    Chrome для Windows подхватывает настройки из Internet Explorer.
    Конечно, все это лучше делать используя групповые политики.

    Плагин SSO реализует ряд других полезных функций.

    2-х факторная аутентификация


    Плагин реализует 2-х факторную аутентификацию в Redmine с отправкой кода через SMS. Правда нужен собственный SMS-шлюз, который будет отправлять SMS-сообщения.

    Можно настраивать различные параметры для 2-х факторной аутентификации. Например, можно отключить аутентификацию на определенных доменах или IP-адресах. Это удобно, когда хочется получить дополнительную проверку только для пользователей, работающих снаружи.

    Можно отключить 2-х факторную аутентификацию для пользователей из определенных групп безопасности Redmine, например, для админов.

    Screen saver внутри окна браузера


    Это такое своеобразное костыльное решение для тех, у кого нет нормальной блокировки пользователя по бездействию в операционной системе. Можно выставить интервал, после которого, в случаи бездействия пользователя в окне браузера, вместо интерфейса Redmine появляется заставка из матрицы.



    Дополнительно можно включить автоматический выход из системы по таймауту.

    Надеюсь, моя статья и наш плагин будут полезны вам. Если у вас есть какие-то вопросы по использованию Redmine, то пишите в комментариях. Постараюсь ответить.
    • +13
    • 14,6k
    • 9
    Поделиться публикацией

    Похожие публикации

    Комментарии 9

      0
      Всё хорошо, но от использования NTLM лучше отказаться, он небезопасен. Может быть, никто и не попытается этим воспользоваться в вашей организации, но зачем привыкать к плохому?
      Лучше настроить Kerberos, это ненамного сложнее.
        0
        Лучше настроить Kerberos, это ненамного сложнее.

        Настраивали, там были какие-то ограничения использования. К сожалению уже не помню какие.
        +1
        А мне ваш плагин так и не удалось заставить работать, пришлось использовать этот:
        github.com/stopfstedt/redmine_http_auth/tree/redmine_2x_compat

        И кстати kerberos с ним работает, вот конфиг апача:
        <Location />
          AuthType Kerberos
          AuthName "Domain Login"
          KrbMethodNegotiate On
          KrbMethodK5Passwd On
          KrbAuthRealms DOMAIN.LOCAL 
          Krb5KeyTab /etc/apache2/http.keytab
          require valid-user
          AllowOverride all
        </Location>
        


        Единственное, не получается сделать авторизацию через форму Redmine вне домена. Только через всплывающее окно самого браузера.
          0
          А с чем конкретно проблемы возникли?
            0
            Если честно уже смутно помню…
            Не знаю, не авторизовывал и всё. Причем я тестовою страничку на php сделал, REMOTE_USER показывал правильно. А в Redmine не пускал.
              0
              Попробовал сейчас снова ваш плагин. Вроде работает. kerberos кстати тоже, в вышеуказанном конфиге изменил location на /login и всё.
              Правда с прошлого раза я Redmine до 2.6.0 обновил, да и у вас какие-то изменения были.
            0
            > авторизации через LDAP (Active Directory является надстройкой над LDAP).

            LDAP — это протокол. openLDAP, Active Directory — это сервера, которые работают используя этот протокол.
              0
              Да. Пожалуй вы правы. С терминалогией немного напутал. Я имел ввиду, что есть понятие LDAP-сервер, а под LDAP я понимал сокращение этого понятия.
                0
                Я это написал не потому что хочу вас обидеть. Просто чтоб было верно. )

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое