Как использовать директивы NGINX auth_jwt с настраиваемыми политиками Azure Active Directory B2C?

При использовании Azure Active Directory B2C (AAD B2C) для проверки подлинности и авторизации, как настроить NGINX Plus для проверки выданного JWT на границе для одного приложения при использовании нескольких политик входа, каждая из которых использует разные ключи подписи токена?


person Granville Schmidt    schedule 03.08.2018    source источник


Ответы (1)


При использовании Azure Active Directory B2C вы можете получить необходимый JWK, выполнив следующую команду:

curl -sS https://login.microsoftonline.com/<your_tenant_name_or_id>//discovery/v2.0/keys

Однако, если вы работаете над более сложным решением идентификации (например, white label, создание / регистрация пользователей в нескольких системах и т. Д.), Вы, вероятно, используете настраиваемые политики через Identity Experience Framework (IEF). В этом случае в ваших политиках может быть настроено несколько ключей подписи токенов. Обычно это не представляет проблемы, поскольку вы можете фактически получить JWK для этой политики, просто добавив ?p=<policy_name> к указанному выше запросу (например, curl -sS https://login.microsoftonline.com/<your_tenant_name_or_id>//discovery/v2.0/keys?p=b2c_1_sign_in). Это становится немного сложнее, если у вас есть несколько политик входа, каждая со своим ключом подписи токена, которые используются для одного и того же приложения, и вы хотите, чтобы NGINX проверял JWT для всех политик в одном файле конфигурации NGINX. Для этого вам нужно объединить все JWK в один JWK, а затем установить auth_jwt_key_file /etc/nginx/<name_of_combined_json_web_key>.jwk. Это не так уж сложно кодировать, но вот GitHub Gist, который я собрал, чтобы помочь: build-aad -b2c-combined-policy-jwk.py.

Вы можете сохранить объединенный JWK из сценария, отправив вывод в файл. Пример:

>> python build-aad-b2c-combined-policy-jwk.py --tenant_url https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com --policies b2c_1_sign_in,b2c_1a_another_policy > /etc/nginx/azure_active_directory.jwk

Кроме того, учитывая, что ключи можно и нужно чередовать, обязательно настройте задание cron или какой-то планировщик для регулярного обновления объединенного JWK с последними ключами.

person Granville Schmidt    schedule 03.08.2018