在使用Azure Active Directory B2C(AAD B2C)进行身份验证和授权时,当使用多个登录策略(每个使用不同的令牌签名密钥)时,如何配置NGINX Plus在单个应用程序的边缘验证已颁发的JWT?
答案 0 :(得分:3)
使用Azure Active Directory B2C时,可以通过发出以下命令来获取所需的JWK:
curl -sS https://login.microsoftonline.com/<your_tenant_name_or_id>//discovery/v2.0/keys
但是,如果您正在开发更复杂的身份解决方案(例如,白标,用户创建/注册到多个系统等),则很可能会通过Identity Experience Framework(IEF)使用自定义策略。在这种情况下,您可能在整个策略中配置了多个令牌签名密钥。这通常不会造成问题,因为您实际上可以通过将?p=<policy_name>
附加到上述请求(例如curl -sS https://login.microsoftonline.com/<your_tenant_name_or_id>//discovery/v2.0/keys?p=b2c_1_sign_in
)中来实际检索该策略的JWK。当您有多个登录策略(每个登录策略都具有用于同一应用程序的自己的令牌签名密钥)并且希望NGINX验证同一NGINX配置文件中所有策略的JWT时,这将变得更具挑战性。为此,您需要将所有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。