При использовании Azure Active Directory B2C (AAD B2C) для проверки подлинности и авторизации, как настроить NGINX Plus для проверки выданного JWT на границе для одного приложения при использовании нескольких политик входа, каждая из которых использует разные ключи подписи токена?
Как использовать директивы NGINX auth_jwt с настраиваемыми политиками Azure Active Directory B2C?
Ответы (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 с последними ключами.