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

в 5:46, , рубрики: 2fa, authentication, google authenticator, plugin, redmine, sms, telegram, Блог компании centos-admin.ru, ит-инфраструктура, Серверное администрирование

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

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

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

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

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

Установка

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

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

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

Настройка Telegram

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Первый вход

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

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

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

Telegram

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Google Auth

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

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

SMS

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

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

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

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

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

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

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

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

Что дальше?

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

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

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

Автор: Centos-admin.ru

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js