Вопрос или проблема
У моих пользователей в сети есть учетные записи в Entra ID, поэтому мои веб-сайты позволяют им входить в систему, используя Entra ID от Microsoft в качестве поставщика OpenID Connect.
Мои веб-серверы Apache2 используют mod_auth_openidc для поддержки входа через Microsoft, и это работает отлично.
Некоторые веб-сайты считаются “высокой безопасности”, и при посещении таких сайтов я хотел бы продолжить использовать вход через Microsoft, но заставить пользователей повторно аутентифицироваться (и, желательно, снова пройти многофакторную аутентификацию). (Возможно, было бы приемлемо требовать, чтобы вход был “достаточно недавним”.)
Я понимаю, что можно использовать параметр “max_age=0”, чтобы заставить повторную аутентификацию, но как это следует настраивать на практике?
Я пытался настроить это как часть URI перенаправления регистрации моего приложения в Azure (и на моем сервере Apache), но это не позволяет мне включать параметры в URI. Я заметил, что есть поддержка отправки обратно утверждения “max_age”, поэтому мне кажется, что я близок к правильному решению, но я был бы признателен за подсказку от любого, у кого это работает.
Ответ или решение
Для реализации принудительной повторной аутентификации пользователей при доступе к веб-сайтам с высоким уровнем безопасности с использованием Apache2, OpenID Connect и провайдера OIDC Entra ID, необходимо внести изменения как в конфигурацию Apache, так и в настройку вашего приложения в Azure. Ниже приведены шаги по реализации данной задачи.
Шаг 1: Настройки Azure
-
Регистрация вашего приложения: Убедитесь, что ваше приложение зарегистрировано в Azure и имеет необходимые разрешения для выполнения аутентификации.
-
Конфигурация редиректов: В настройках вашего приложения в Azure нет необходимости указывать параметры в URI редиректа, но вы можете передавать параметры в запросе при аутентификации. Поэтому в дальнейшем вам потребуется добавить параметры при выполнении запроса к аутентификации.
Шаг 2: Конфигурация Apache и mod_auth_openidc
-
Установите модуль
mod_auth_openidc
: Убедитесь, что у вас установлен и активирован модульmod_auth_openidc
. Для установки вы можете использовать:sudo apt-get install libapache2-mod-auth-openidc
-
Обновите конфигурацию Apache для вашего сайта:
В конфигурационном файле Apache, относящемся к вашему сайту (например,
/etc/apache2/sites-available/your-site.conf
), добавьте или измените следующие параметры:OIDCProviderMetadataURL https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration OIDCCryptoPassphrase YOUR_CRYPTO_PASSPHRASE OIDCClientID YOUR_CLIENT_ID OIDCClientSecret YOUR_CLIENT_SECRET OIDCRedirectURI https://your-domain.com/oidc/redirect OIDCCCertificateFile /path/to/certificate.pem OIDCCertificateKeyFile /path/to/certificate-key.pem OIDCUsePkce On
-
Аутентификация с параметрами:
Чтобы принудить пользователей к повторной аутентификации, используйте параметрmax_age
, добавив его в запрос аутентификации. Следующий пример метода аутентификации показывает, как это сделать:<Location /secure-area> AuthType openid-connect Require valid-user # Принудительная переаутентификация OIDCRequestExtra "max_age=0" </Location>
-
Настройка требований к MFA:
Обязательно используйте настройки Azure AD для интеграции многофакторной аутентификации (MFA). В Azure Active Directory вы можете настроить правила MFA, которые будут применяться к вашим пользователям при повторной аутентификации.
Шаг 3: Тестирование
-
Перезапустите Apache: После того как вы обновили конфигурацию, не забудьте перезапустить сервер Apache:
sudo systemctl restart apache2
-
Тестируйте: Перейдите на защищенную область вашего сайта и убедитесь, что при попытке доступа к ней требуется повторная аутентификация.
Шаг 4: Примечания по отладке
- Если вы не видите ожидаемого поведения, проверьте журналы Apache для ошибок, связанных с модулем
mod_auth_openidc
. - Убедитесь, что ваши параметры, включая
max_age
, корректно передаются и обрабатываются.
Следуя данным шагам, вы сможете успешно настроить повторную аутентификацию и требования к многофакторной аутентификации для ваших веб-сайтов с высоким уровнем безопасности.