Двухфакторная аутентификация в Redmine

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


Но время не стоит на месте. Мы активно внедряем Telegram в бизнес-процессы компании (раз, два, три).


В связи с этим решили сделать аутентификацию через Telegram в Redmine. Заодно с этим переписать старый плагин про СМС и добавить поддержку Google Authenticator.

293a6577a7d94267886b8c6c5d949dc8.png

Далее мы расскажем о том как установить, настроить и использовать этот плагин.


Установка

Заходим в папку с плагинами
cd plugins


Клонируем репозиторий
git clone https://github.com/centosadmin/redmine_2fa.git


Переходим в корень Redmine
cd ..


Устанавливаем нужные гемы
bundle install


Выполняем миграции
rake redmine:plugins:migrate


Дополняем конфиг config/configuration.yml


# specific configuration options for production environment
# that overrides the default ones
production:
  redmine_2fa:
    sms_command: 'echo %{phone} %{password}'

в sms_command впишите системную команду, которой будут отправляться сообщения.


Такой подход используется для совместимости с большинством API СМС-шлюзов. Скорее всего в вашем случае будет что-то вроде


/usr/bin/curl "https://sms.ru/api/send?phone=%{phone}&message=code: %{password}"


Перезапускаем Redmine.


Настройка

Предварительные требования


Так как веб-хуки от Telegram отправляются только на HTTPS адреса, ваш Redmine должен быть настроен на использование этого протокола.


Обязательное использование


По-умолчанию отключено, чтоб после установки плагина вы могли выбрать «не использовать» и войти в Redmine.


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


3b57f6d358ec43c1808a0692664ff4e6.png

Настройка Telegram


Для аутентификации через Telegram нужно завести отдельного бота. Бота создаём с помощью @BotFather. Инструкция по созданию бота.


fa4153afd297462aa91be21256c2388d.png

Полученный от него ключ вводим в настройки и нажимаем Применить.


Инициализация бота


После того как токен сохранён, нужно инициализировать бота.


cba8c9b0ec4d41fd8d0855792dbef6dc.png

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


Также будет установлен веб-хук — адрес на который будут приходить запросы от API в случае, если кто-то напишет боту.


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


Важно! При смене токена нужно Инициализировать бота ещё раз.


Деактивация бота


Данная функция пригодится если


  • вы решите использовать этого бота где-то ещё
  • по каким-то причинам вам нужно перейти на другого бота.

fa4153afd297462aa91be21256c2388d.png

В процессе деактивации сбрасывается токен и деактивируются все пользователи, использующие плагин.


При следующем входе в систему им нужно будет добавить себе в контакты нового бота.


Важно! Не забудьте активировать бота, когда введёте и сохраните новый токен.


А как это со стороны пользователя?

Первый вход


При первом входе пользователь может выбрать один из способов аутентификации либо отказаться от использования второго фактора.


0bce3b965ac84b7da245aeac3f07fb50.png

Отказаться он сможет только в том случае, если вы разрешили это в настройках плагина.


Telegram


9a8691da56ff4d5e950beb8fbaa783df.png

После команды /start бот сохранит в Redmine ваш аккаунт Telegram и предложит связать его с вашим аккаунтом в Redmine


6dd039fe8bc8488fa864acdbdaca30bf.png

Вводим предложенную команду


dd7995f8be6b428b912a696cfd22ef52.png

И получаем на почту письмо


a0bfd75c63884b518da59192958be459.png

При переходе по ссылке увидим сообщение


56d339bbd82044d28a51566fba9024a6.png

и форму логина.


Нужно ввести логин и пароль ещё раз.


После чего увидим форму ввода одноразового пароля


eaf449801632463989067efcd3791e62.png

и получим заветный код от бота


0167118825af40b2b2a00bc768992f7d.png

Настройка Telegram — самая сложная. Но ради удобства в использовании минуту потратить не жалко.


Google Auth


Аутентификация через гугл настраивается проще всего. Сосканируйте QR-код в приложении и нажмите «Далее».


fb576341b55f4805b660e0f26f37adfb.png

SMS


Для получение кодов через СМС нужно сперва подтвердить номер телефона, на который вы будете получать СМС с одноразовыми паролями.


912ce309d95c4ca2b2904835f5b72680.gif

Миграция со старого плагина


Если вы пользовались нашим старым плагином, то лучше перейти с него на новый. Подробная инструкция о переходе доступна здесь.


Сброс настроек 2FA


Может случиться что пользователь захочет сменить способ аутентификации. На его странице есть специальная ссылка для этого.


8807e27e88234445a4ed1791a09278f5.png

После сброса настроек при следующем логине пользователю будет предложено выбрать способ аутентификации.


Что дальше?

Теперь вы знаете как добавить двухфакторную аутентификацию в Redmine. Самое время применить полученные знания на практике.


На вопросы о плагине готовы ответить в комментариях к этой публикации.


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

Комментарии (0)

© Habrahabr.ru