如何区分微软身份平台颁发的OIDC JWT访问令牌与ID令牌?
如何区分微软身份平台颁发的OIDC JWT是访问令牌还是ID令牌
不需要依赖scp或roles这类声明,你可以通过以下几个更可靠的固定JWT声明来判断:
检查
typ令牌类型声明
ID令牌的typ字段固定为ID Token;而访问令牌的typ通常是Bearer(部分场景下可能省略该字段,但ID令牌一定会包含typ: "ID Token")。对比
aud受众声明
ID令牌的aud值始终是你的应用客户端ID(即注册在Azure AD里的应用ID);访问令牌的aud则是目标受保护资源的标识符——比如调用Microsoft Graph时是https://graph.microsoft.com,调用自定义API时是该API的应用ID URI或客户端ID。即使访问令牌的aud恰好是你的客户端ID(比如获取自己API的访问令牌),结合typ字段也能区分。查看OIDC核心用户属性声明
ID令牌严格遵循OIDC规范,会包含用户身份相关的核心声明,比如sub(用户唯一标识)、name、email、given_name等(只要请求时包含了对应的scope);而访问令牌的核心作用是授权,不会默认包含这些用户属性类声明,即使有也是额外添加的非必需项。检查
nonce声明
如果你的认证请求中发送了nonce参数,ID令牌会原样返回这个nonce字段;访问令牌绝不会包含nonce声明,这是OIDC规范里ID令牌特有的验证字段。
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

