2

使用 Azure Active Directory B2C (AAD B2C) 进行身份验证和授权时,如何配置 NGINX Plus 以在使用多个登录策略且每个使用不同的令牌签名密钥时在边缘验证单个应用程序的已颁发 JWT?

4

1 回答 1

3

使用 Azure Active Directory B2C 时,可以通过发出以下命令获取所需的 JWK:

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

但是,如果您正在开发更复杂的身份解决方案(例如白标、用户创建/注册到多个系统等),那么您可能会通过身份体验框架 (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。

于 2018-08-03T01:51:59.080 回答