You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

验证Azure AD B2C生成的JWT令牌的密钥获取及验证失败问题

解决思路
  • 修正OpenID配置端点使用错误
    你此前使用的是通用Azure AD的OpenID配置端点,并不匹配Azure AD B2C的签发规则,正确的配置端点格式为 https://{你的B2C租户名}.b2clogin.com/{你的B2C租户名}.onmicrosoft.com/{你实际使用的用户流名称}/v2.0/.well-known/openid-configuration,从该端点返回结果中获取jwks_uri字段对应的地址,即可拿到B2C用于签名令牌的公钥集合。
  • 修正签名算法使用错误
    你当前代码中使用HMACSHA256Algorithm对称加密算法做校验是完全错误的:Azure AD B2C签发的JWT令牌采用RS256非对称签名算法,不存在你代码里需要填写的对称密钥,你只需要用从jwks接口拿到的对应公钥,搭配RS256算法即可完成签名校验。
  • 更简便的实现方案
    不需要手动编写令牌校验逻辑,直接在Azure门户的Function App配置页开启「身份验证」功能,选择Azure AD B2C作为身份提供者,按提示填写租户信息、用户流、应用ID等参数,Azure Functions平台会自动完成全流程的令牌校验,你直接从请求上下文的ClaimsPrincipal中提取用户声明即可,稳定性远高于自定义校验逻辑。
  • 自定义校验的补充注意事项
    如果你坚持要自己实现校验,需要额外完成以下逻辑:
  1. 解析JWT头部的kid字段,从公钥集合中匹配对应kid的公钥,不要直接拿整个x5c字段使用
  2. 除了签名校验,必须同时校验令牌的iss(签发者)、aud(受众)、exp(过期时间)字段,避免安全风险
  3. 公钥可以长期缓存,不需要每次请求都拉取jwks接口

内容的提问来源于stack exchange,提问作者Marco Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:09:01