Azure APIM validate-jwt无法验证Azure Front Door生成的AD B2C令牌
问题:Azure API Management验证自定义域名Azure AD B2C令牌失败
背景
我们的解决方案基于Azure AD B2C,近期新增Azure Front Door以支持用户通过自定义域名访问Azure AD B2C。目前用户可通过两种方式获取有效JWT令牌,二者仅iss声明存在差异:
- 原生Azure AD B2C域名生成的令牌:
"iss": "https://myappname.b2clogin.com/myappname.onmicrosoft.com/v2.0/" - 自定义域名(经Azure Front Door)生成的令牌:
"iss": "https://login.myappname.nl/00000000-0000-0000-0000-000000000000/v2.0/"
对应两个不同的OpenID Connect知名配置地址:
- 原生B2C域名配置地址:
https://myappname.b2clogin.com/myappname.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1A_MYAPPVERIFICATIONANDSIGNUP - 自定义域名配置地址:
https://login.myappname.nl/00000000-0000-0000-0000-000000000000/v2.0/.well-known/openid-configuration?p=B2C_1A_MYAPPVERIFICATIONANDSIGNUP
APIM验证策略配置
在Azure API Management中配置了validate-jwt策略,逻辑如下:
- 读取令牌的
iss声明值 - 根据
iss值选择对应的OpenID配置URL:若iss以https://login开头则使用自定义域名配置,否则使用原生B2C配置(两种令牌的受众一致)
问题现象
原生B2C域名生成的令牌可正常通过验证,但自定义域名生成的令牌返回401错误。通过Application Insights查询到错误详情:
| 列名 | 值 |
|---|---|
| LastErrorSource | validate-jwt |
| LastErrorScope | product |
| LastErrorSection | inbound |
| LastErrorReason | TokenSignatureKeyNotFound |
| LastErrorMessage | IDX10500: Signature validation failed. No security keys were provided to validate the signature. |
疑问:为何APIM策略仅拒绝自定义域名生成的令牌?
内容的提问来源于stack exchange,提问作者DeMaki
相关产品推荐
相关产品推荐

