使用 Azure Active Directory B2C (AAD B2C) 进行身份验证和授权时,在使用多个登录策略(每个策略均使用不同的 token 签名 key )时,如何配置 NGINX Plus 以在边缘验证单个应用程序颁发的 JWT?
最佳答案
使用 Azure Active Directory B2C 时,可以通过发出以下命令获取所需的 JWK:
curl -sS https://login.microsoftonline.com/<your_tenant_name_or_id>//discovery/v2.0/keys
但是,如果您正在开发更复杂的身份解决方案(例如白标签、用户创建/注册到多个系统等),那么您可能会通过身份体验框架 (IEF) 使用自定义策略。如果是这种情况,您可能在整个策略中配置了多个 token 签名 key 。这通常不会造成问题,因为您只需附加 ?p=<policy_name>
即可实际检索该策略的 JWK。针对上述请求(例如 curl -sS https://login.microsoftonline.com/<your_tenant_name_or_id>//discovery/v2.0/keys?p=b2c_1_sign_in
)。当您有多个登录策略,每个策略都有自己的用于同一应用程序的 token 签名 key ,并且希望 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
此外,鉴于 key 可以而且应该轮换,请务必设置 cron 作业或某种调度程序来定期使用最新 key 更新组合的 JWK。
关于azure - 如何将 NGINX auth_jwt 指令与 Azure Active Directory B2C 自定义策略结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51664283/