如何区分Azure AD B2C与Azure AD令牌并完成API端验证?
区分Azure AD与Azure AD B2C令牌并验证的方法
不用让调用方额外传标识,直接从令牌里就能区分
你可以从JWT令牌的以下关键字段直接判断是Azure AD还是B2C的令牌:
- iss(签发者)字段:
- Azure AD令牌的签发者是
https://login.microsoftonline.com/{租户ID}/v2.0这种格式,域名是通用的login.microsoftonline.com - Azure AD B2C令牌的签发者是
https://{你的B2C租户名}.b2clogin.com/{租户ID}/{策略名}/v2.0/,里面会带专属的B2C域名(xxx.b2clogin.com)和具体的策略名称,一眼就能和AD的区分开
- Azure AD令牌的签发者是
- tid(租户ID)字段:
虽然两者都有租户ID,但搭配iss字段的域名就能100%确定类型,核心还是看iss就行
验证流程怎么适配
你接着现在用JWKS验证B2C令牌的路子来就行,只要根据令牌类型换对应的参数:
- 先解析JWT的头部和载荷,把
iss字段提出来 - 根据iss判断类型:
- 如果是Azure AD令牌:用Azure AD的JWKS端点
https://login.microsoftonline.com/common/discovery/v2.0/keys,租户ID直接从iss里拿 - 如果是B2C令牌:用你对应的B2C租户JWKS端点,格式是
https://{B2C租户名}.b2clogin.com/{B2C租户名}.onmicrosoft.com/{策略名}/discovery/v2.0/keys,租户名、策略名都能从iss字段里提取出来
- 如果是Azure AD令牌:用Azure AD的JWKS端点
- 签名验证、过期时间检查这些核心逻辑,直接复用你现在验证B2C令牌的代码就行,只需要替换JWKS端点和要校验的签发者值
额外提醒
- 验证的时候一定要严格校验iss的完整值,别让伪造的令牌蒙混过去
- 如果你的API支持多种B2C策略,记得从iss里提取具体策略名,对应到正确的JWKS端点
- 完全不用让调用方额外传令牌类型,靠令牌自己的字段就能搞定所有区分和适配
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

