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


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


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


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


Установка


Заходим в папку с плагинами
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.


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



Настройка Telegram


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



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


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


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



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


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


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


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


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


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


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


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


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


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


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


Первый вход


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



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


Telegram



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



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



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



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



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


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


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



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



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


Google Auth


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



SMS


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



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


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


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


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



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


Что дальше?


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


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


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

Поделиться с друзьями
-->

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


  1. nmk2002
    15.10.2016 01:55
    +2

    Как обрабатываете ситуации, когда пользователь утрачивает контроль над telegram аккаунтом или теряет смартфон с Google токеном? Есть какие-то аварийные коды, контрольные вопросы или войти в аккаунт станет невозможно?


    1. Sleuthhound
      15.10.2016 06:39

      Присоединяюсь к вопросу, тоже об этом подумал.


    1. olemskoi
      15.10.2016 12:24
      +1

      Если утрачен контроль над Telegram — его нужно восстановить и все вернется на свои места. Аналогично и SMS.

      Что касается Google Auth, можно выводить аварийные коды рядом со штрих-кодом при инициализации. Такой вариант подойдет?