Впровадження двофакторної аутентифікації (2FA) є важливим кроком у забезпеченні безпеки користувацьких акаунтів та підвищенні загальної безпеки. Keycloak, відкрите рішення для управління ідентифікацією та доступом, надає потужну підтримку різних методів 2FA. У цьому блозі ми розглянемо, як налаштувати кілька методів 2FA в Keycloak: SMS, Email та одноразовий пароль на основі часу (TOTP) через додаток Authenticator.
Огляд
Сьогодні ми налаштуємо демонстраційний клієнтський додаток, який перенаправляє на Keycloak для входу, після чого Keycloak запропонує варіант MFA. Ми охопимо наступне:
- Запуск Keycloak за допомогою Docker.
- Налаштування потоку багатофакторної аутентифікації (MFA) в Keycloak.
3.
Запуск демонстраційного додатку для тестування потоку MFA.
Для тих, хто хоче пропустити детальні кроки та одразу перейти до коду, перейдіть до репозиторію на GitHub.
Потік аутентифікації:
Потік MFA
- Старт: Це точка входу в процес аутентифікації.
- Запуск форм browser_multiple_mfa_flow: Користувач ініціює процес багатофакторної аутентифікації через браузер.
- Форма введення імені користувача та пароля: Користувача просять ввести своє ім’я користувача та пароль.
- Запуск Multiple_2FA: Цей крок позначає початок процесу множинної двофакторної аутентифікації (2FA).
- Форма OTP: Користувачеві пропонується вибір з трьох методів OTP для аутентифікації:
a. TOTP (Одноразовий пароль на основі часу): Користувач генерує одноразовий пароль за допомогою додатку-автентифікатора, наприклад, Google Authenticator або Authy.
b.
Аутентифікація через SMS (2FA): Одноразовий пароль (OTP) надсилається на зареєстрований мобільний номер користувача через SMS.
c. Email OTP: Одноразовий пароль (OTP) надсилається на зареєстровану електронну пошту користувача. - Кінець Multiple_2FA: Це позначає завершення процесу множинних методів 2FA.
- Кінець browser_multiple_mfa_flow forms: Користувач завершує процес MFA у браузері.
- Cookie: Використовується cookie для аутентифікації сесії.
- Kerberos: Альтернативний метод, що використовує аутентифікацію через Kerberos.
- Редирект до постачальника ідентифікації: Користувач перенаправляється до постачальника ідентифікації для аутентифікації, якщо це необхідно.
11.
Кінець: Процес аутентифікації завершується тут.
Хоча Keycloak підтримує інші методи аутентифікації, такі як cookies, Kerberos і редирект до постачальника ідентифікації (кроки 8–10), цей пост зосереджений виключно на процесі MFA для користувачів, які аутентифіковані безпосередньо через Keycloak.
Інтерфейс служби постачальника (SPI) для Keycloak
Для розширення функціональності Keycloak для SMS та Email OTP, ми використаємо два кастомних SPI:
- SMS SPI: Цей SPI обробляє генерацію та валідацію SMS OTP. GitHub — SMS SPI
- Email SPI: Цей SPI обробляє генерацію та валідацію Email OTP. GitHub — Email SPI
Скомпільовані версії цих SPI вже є частиною репозиторію на GitHub і можуть бути знайдені в каталозі “plugins”.
Вільно компілюйте свої власні версії цих SPI з вихідного коду.
Покрокова інструкція з реалізації:
Попередні вимоги
- Переконайтеся, що Docker встановлено на вашій системі.
- Креденціали SMTP.
Крок 1: Налаштування Keycloak
1. Клонування репозиторію та зміна каталогу:
git clone https://github.com/shreyasY2k/keycloak-mfa.git
cd keycloak-mfa
2. Створіть та налаштуйте файл .env:
Створіть файл .env
в кореневому каталозі та заповніть наступні деталі:
PG_DB=your_postgres_db
PG_USER=your_postgres_user
PG_PASSWORD=your_postgres_password
KEYCLOAK_ADMIN=your_keycloak_admin
KEYCLOAK_ADMIN_PASSWORD=your_keycloak_admin_password
3. Запустіть Keycloak за допомогою Docker:
docker compose up
4. Доступ до консоль адміністратора Keycloak:
Відкрийте браузер та перейдіть за адресою http://localhost:8080
. Ви повинні побачити консоль адміністратора Keycloak.
5.
Увійти в Keycloak:
Використовуйте ім’я користувача адміністратора та пароль, вказані у вашому файлі .env
, щоб увійти.
Крок 2: Налаштування потоку автентифікації
1. Подвоїти браузерний потік:
- Перейдіть до розділу “Authentication” у вашій області.
- Натисніть на “Flows”.
- Виберіть “Browser”, Action і натисніть “Duplicate”.
- Назвіть подвоєний потік, наприклад,
browser_multiple_mfa_flow
.
2. Видалити умовну форму OTP:
Видалити умовну форму OTP
3. Змініть browser_multiple_mfa_flow_forms на “Required”.
4. Створіть підпотік:
- Натисніть на “+” та виберіть “Add sub-flow”, введіть дані та натисніть “Add”.
Підпотік MFA
- Змініть з “Disabled” на “Required”.
5.
Налаштування підпотоку:
Додамо необхідні кроки до підпотоку для налаштування MFA.
- Натисніть на “+” поруч з підпотоком, виберіть крок і натисніть “Add”
- TOTP: OTP форма
- SMS: Аутентифікація по SMS (2FA)
- Email: Email OTP
Кроки підпотоку
Коли ви додасте всі три кроки, переконайтеся, що ви змінили їх усі з “Disabled” на “Alternative”.
Перед тим як перейти до наступного кроку, переконайтеся, що ви налаштували email для імені користувача адміністратора в Keycloak. Якщо ні, перейдіть до users, натисніть на ім’я адміністратора і введіть адресу електронної пошти.
6. Налаштування Email OTP:
Вам потрібно налаштувати SMTP в Keycloak, щоб Email OTP працював.
- Натисніть на іконку налаштувань і встановіть псевдонім — “email_otp_flow”.
- Точно так само встановіть псевдонім для OTP форми.
- Перейдіть до “Realm Settings”, виберіть “Email” і заповніть ваші SMTP деталі.
7.
Налаштування SMS OTP:
- Натисніть на іконку налаштувань і встановіть псевдонім — “sms-2fa” (повинен бути однаковим).
- Ви можете вибрати налаштування SMS API, ми будемо використовувати “Режим симуляції”, щоб отримувати OTP з журналів.
Тепер, коли все налаштовано, настав час використовувати цей новостворений потік.
8. Використання потоку “browser_multiple_mfa_flow”:
- Натисніть на Дію -> Прив'язати потік -> Потрібен потік -> Зберегти.
- Перевірте діаграму потоку для оновленого потоку аутентифікації користувачів через браузер.
9. Налаштування обов'язкових дій:
- Перейдіть до “Authentication” -> “Required actions”.
- Перевірте наступне:
Realm — Обов'язкові дії
10.
Налаштування клієнта test-mfa:
- Перейдіть до “Clients” -> “Create Client”.
Основні налаштування:
Тип клієнта: OpenID Connect
Client ID: test-mfa
Налаштування можливостей:
Прямі доступи: Зніміть галочку
Налаштування входу:
Дійсні URI для переадресації: [http://localhost:300/*](http://localhost:300/*)
Веб-джерела: \*
- Натисніть Save.
Крок 3: Запуск демонстраційного додатку
Перед тим, як запустити демонстраційний додаток, давайте спочатку створимо тестового користувача в Keycloak.
1. Створіть користувача test:
- Перейдіть до користувачів, додайте користувача -> Введіть дійсне ім’я користувача, електронну пошту та натисніть create.
Створити користувача
- Виберіть credentials, set password -> save**.
2.
Запуск демонстраційного додатку:
- Змініть директорію:
cd mfa-demo-app
- Дотримуйтесь інструкцій у README для запуску додатку.
- Відкрийте http://localhost:3000.
- Введіть облікові дані для test-mfa-user.
- OTP буде надіслано на електронну пошту користувача.
- Далі вам буде запропоновано налаштувати TOTP, а після цього — SMS OTP.
- Після введення вашого мобільного номера перевірте логи Keycloak для OTP.
Електронна пошта OTP
TOTP
SMS OTP
Логи SMS OTP
Дотримуючись цього посібника, ви зможете налаштувати кілька методів 2FA в Keycloak і ефективно захистити облікові записи користувачів.
Перекладено з: Mastering Multi-Factor Authentication in Keycloak: SMS, Email, and TOTP Setup Guide