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

Azure AD JWT ID Token验证方法及官方库缺失疑问咨询

Azure AD JWT ID Token 验证指南及常见问题解答

一、验证用的公钥获取方式

  • Azure AD的公钥通过OpenID元数据端点获取,地址格式为:https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration
    • 其中{tenant-id}可替换为你的租户ID,或使用common(适配多租户应用)
    • 该端点返回的JSON数据中,jwks_uri字段指向公钥集(JWKS格式)的地址,请求此地址即可拿到用于签名验证的公钥

二、使用公钥验证ID Token的步骤

服务器端验证需完成以下核心流程:

  1. 解析ID Token的Header部分,提取kid(密钥ID),用于匹配JWKS中对应的公钥
  2. 从JWKS中筛选出kid匹配的公钥,转换为可用于验证的格式(如PEM)
  3. 验证JWT的签名有效性
  4. 验证关键声明(必须完成,否则验证不完整):
    • iss(签发者)必须匹配Azure AD的签发地址(如https://login.microsoftonline.com/{tenant-id}/v2.0)
    • aud(受众)必须与你的应用注册的Client ID一致
    • exp(过期时间)需晚于当前时间,nbf(生效时间)需早于当前时间
    • 若客户端生成了nonce,需验证该声明的一致性;按需验证iat等其他声明

三、关于微软官方令牌验证库的说明

微软并非没有官方验证库,只是不同语言生态下的呈现形式不同:

  • .NET平台:使用Microsoft.IdentityModel.Tokens和System.IdentityModel.Tokens.Jwt包,专门处理Azure AD的JWT验证
  • Java平台:通过MSAL for Java(Microsoft Authentication Library)提供JWT验证工具
  • Node.js:可使用@azure/msal-node官方SDK,或结合jsonwebtoken与jwks-rsa工具完成验证

谷歌的官方库更多是针对自身生态做了更统一的封装,微软的验证能力则分散在各语言的官方SDK中,均由官方维护。

你的Angular客户端代码示例

export class AccountComponent implements OnInit {

  constructor(private tokenService: TokenStorageService, private readonly _authService: SocialAuthService) { }
  
  ngOnInit(): void {
    this._authService.authState.subscribe(this.externalAccountLogin);
  }

  signInWithMicrosoft(){
    this._authService.signIn(MicrosoftLoginProvider.PROVIDER_ID);
  }

  externalAccountLogin(user: SocialUser): void{
    switch(user.provider){
      case MicrosoftLoginProvider.PROVIDER_ID:
        console.log(user.idToken);
        break;
      case GoogleLoginProvider.PROVIDER_ID:
        //ToDo
        break;
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:55:21