Azure AD中SPA&API场景下不透明访问令牌的AUD/应用ID验证方法问询
Azure AD中不透明访问令牌的验证方案
核心结论
不透明令牌必须验证,绝对不能跳过。这类令牌没法直接解析出AUD、appId这类关键声明,必须通过官方提供的方式完成验证。
具体验证方法
1. 用Azure AD令牌自省端点(官方推荐)
这是标准的验证方式,直接调用Azure AD的自省接口就能拿到令牌的完整声明,包括AUD、appId、clientId这些字段:
- 发送POST请求到
https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/introspect - 请求参数需包含:
token:后端收到的不透明令牌token_type_hint:固定填access_tokenclient_id:你的API应用的clientIdclient_secret:你的API应用的客户端密钥(仅针对机密客户端)
- 返回结果里会明确给出
aud(受众)、appid(令牌的目标应用ID)、client_id(发起令牌请求的客户端ID),直接校验这些值是否符合预期即可。
2. 间接验证(比如你用的Graph /me接口)
你通过调用https://graph.microsoft.com/v1.0/me并传入不透明令牌的方式,只能间接证明令牌有效且能访问Graph API,但存在明显局限:
- Graph的响应不会返回AUD、appId或clientId这些令牌声明,无法直接校验这些关键信息。
- 这种方式没法确认令牌是否专门发给你的API应用(即AUD是否为你的API的clientId),要完成这类校验,还是得用自省端点。
重要提醒
- 绝对不能跳过验证:不透明令牌本身没有可解析的内容,不验证的话无法确认令牌合法性、是否属于你的应用,会留下严重安全漏洞。
- 调用自省端点要做好权限控制:确保只有你的API应用能调用该接口,客户端密钥需妥善保管,避免泄露。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

