You need to enable JavaScript to run this app.
文档中心
智能体身份和权限管理平台

智能体身份和权限管理平台

复制全文
下载 pdf
身份管理
Agent Identity Token 格式定义
复制全文
下载 pdf
Agent Identity Token 格式定义
背景​
本文档定义了火山 Agent Identity 服务签发的两类 Token 格式与字段规范。两类令牌池分别面向不同的身份主体:​
​
令牌池类型​
用途​
UserPool​
​
面向终端用户,通过联邦登录(Feishu、Dingding 等 IDP)获取身份令牌,包含用户基础信息和 IDP 原始 Claims​
WorkloadPool​
面向工作负载(服务/Agent),支持 Agent 执行链路追踪(act 字段),用于 A2A 多层级调用场景​
​
设计原则:标准兼容(符合 OIDC/JWT 规范)、可扩展(支持自定义 Claims 和 Agent 链路)、安全优先(完整的校验与审计机制)。​
UserPool 和 WorkloadPool 的 Token 都符合 OIDC 规范,校验逻辑一致,详见本文"OIDC Token 校验逻辑"章节。​
UserPool Token​
UserPool Token 是面向终端用户的身份令牌,通过联邦登录从外部 IDP(如 Feishu、Dingding)获取用户身份信息后签发。​
完整示例(Feishu 联邦登录)​
​
{​
"amr": [​
"pwd"​
],​
"at_hash": "9Qmr0Zf_g_L8K74_Fzh01Q",​
"aud": [​
"web4",​
"mcp-server"​
],​
"auth_time": 1780272609,​
"azp": "web4",​
"c_hash": "5oyQj2mYagW33Qg12KOosg",​
"client_id": "web4",​
"email": "zhangsan.1@bytedance.com",​
"email_verified": true,​
"exp": 1780276227,​
"external.claims": {​
"access_mode": "delegated",​
"auth_exp": 1811808608,​
"auth_id": "7646212630993980640",​
"auth_time": 1780272608,​
"avatar_big": "https://s3-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=640x640&cut_type=&quality=&format=image&sticker_format=.webp",​
"avatar_middle": "https://s1-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=240x240&cut_type=&quality=&format=image&sticker_format=.webp",​
"avatar_thumb": "https://s3-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=72x72&cut_type=&quality=&format=image&sticker_format=.webp",​
"avatar_url": "https://s3-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=72x72&cut_type=&quality=&format=image&sticker_format=.webp",​
"client_id": "cli_a93b9975a539dcd9",​
"department_id": [​
"od-23e0cd2f2fcb2e3d7a2abc4e160da04c",​
"od-7c76f229484761fb1c9e5e3f61358501"​
],​
"department_path": [​
{​
"department_id": "od-23e0cd2f2fcb2e3d7a2abc4e160da04c",​
"department_name": {​
"i18n_name": {},​
"name": "test_department2"​
}​
},​
{​
"department_id": "od-7c76f229484761fb1c9e5e3f61358501",​
"department_name": {​
"i18n_name": {},​
"name": "test_department"​
}​
}​
],​
"email": "zhangsan.1@bytedance.com",​
"email_verified": true,​
"en_name": "zhangsan",​
"enc": "AiQkAQECAMIDAAEBAwACAQ0AAwsLAAAAAwAAAAdGZWF0dXJlAAAAEG9hdXRoX29wYXF1ZV9qd3QAAAAIVGVuYW50SWQAAAABMAAAAARUaW1lAAAACjE3ODAyNzIwMDAPAAQMAAAAAQoAAWLFIlmvgAAiCwACAAAADIlALRILTo+IALK7owsAAwAAADDS8cxcW4vDu3QniqocWk8YYr0i8oJvKFadp2VDbXhQ5rRgfrR60swrcOADb0RdWcsACwAFAAAABWV1X25jACxyvix9V945muCJywyLoxjUi5ZpmlX4GfDmNpGREttg0OdT0FZfrb8V39FrktMm1HhK5ES+9CcR/M01BlUwBkqKrm98HC3Nsgkoi8gdYKjnsS9qyjbkeQTZ0pxMK1aj7Wq3cPigJLs/0y+wY8TBC+1mqKN9t4L3j+eKIukhZEEnJsIS4hMAr+NZo3JGzcPZmxkOBQ==",​
"enc_ver": "v1",​
"exp": 1780279808,​
"external_provider_user_identifier": "on_ccc4a60984d79b65a3bb1ab941c5b8a6",​
"iat": 1780272608,​
"jti": "7646212633158224857",​
"mobile": "+8618999999999",​
"name": "zhangsan",​
"opaque": true,​
"open_id": "ou_330fce6c59ef2af6132c8bb2751e92f4",​
"phone_number": "+8618999999999",​
"phone_number_verified": true,​
"picture": "https://s3-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=72x72&cut_type=&quality=&format=image&sticker_format=.webp",​
"scope": "auth:user.id:read contact:contact.base:readonly contact:user.base:readonly contact:user.department:readonly contact:user.department_path:readonly contact:user.email:readonly contact:user.employee_id:readonly contact:user.phone:readonly directory:employee:read",​
"session_extra": {​
"dpop_thumbprint": "",​
"is_anonymous": false,​
"need_auth": false,​
"tenant_create_source": 2,​
"valid_for_app_id": false​
},​
"tenant_key": "1ad4adc5d29b5b81",​
"tenant_unit": "eu_nc",​
"typ": "access_token",​
"union_id": "on_ccc4a60984d79b65a3bb1ab941c5b8a6",​
"unit": "eu_nc",​
"user": {​
"avatar": {​
"avatar_240": "https://s1-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=240x240&cut_type=&quality=&format=png&sticker_format=.webp",​
"avatar_640": "https://s1-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=640x640&cut_type=&quality=&format=png&sticker_format=.webp",​
"avatar_72": "https://s1-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=72x72&cut_type=&quality=&format=png&sticker_format=.webp",​
"avatar_origin": "https://s1-imfile.feishucdn.com/static-resource/v1/default-avatar_v3_00nv_f6d92d82-6e2f-4e51-8c5c-8e02b570d7ag~?image_size=noop&cut_type=&quality=&format=png&sticker_format=.webp"​
},​
"department_ids": [​
"od-23e0cd2f2fcb2e3d7a2abc4e160da04c",​
"od-7c76f229484761fb1c9e5e3f61358501"​
],​
"department_path": [​
{​
"department_id": "od-23e0cd2f2fcb2e3d7a2abc4e160da04c",​
"department_name": {​
"i18n_name": {},​
"name": "test_department2"​
}​
},​
{​
"department_id": "od-7c76f229484761fb1c9e5e3f61358501",​
"department_name": {​
"i18n_name": {},​
"name": "test_department"​
}​
}​
],​
"description": "",​
"email": "zhangsan.1@bytedance.com",​
"en_name": "",​
"mobile": "+8618999999999",​
"mobile_visible": true,​
"name": "zhangsan",​
"open_id": "ou_330fce6c59ef2af6132c8bb2751e92f4",​
"union_id": "on_ccc4a60984d79b65a3bb1ab941c5b8a6",​
"user_id": "6238c417"​
},​
"user_id": "6238c417",​
"ver": "v1"​
},​
"iat": 1780272627,​
"iss": "https://userpool-1337-1337-1337-111c-1113.auth.id.cn-beijing.volces.com",​
"locale": null,​
"name": "zhangsan",​
"sid": "b5ece5be-6617-4f42-9c55-07b2b2cce3a9",​
"sub": "adb205a5-d61e-40a7-bf43-59b896c47b71"​
}​
​
完整示例(Dingding 联邦登录)​
​
{​
"amr": [​
"pwd"​
],​
"at_hash": "tqKkGqIjSl4oPAxKquR_TA",​
"aud": [​
"web4",​
"mcp-server"​
],​
"auth_time": 1780273199,​
"azp": "web4",​
"c_hash": "TNvKD8nLsVZveR7dl23iqw",​
"client_id": "web4",​
"email": "zhangsan.1@bytedance.com",​
"email_verified": true,​
"exp": 1780276840,​
"external.claims": {​
"avatarUrl": "https://static-legacy.dingtalk.com/media/lQDPM5KYNfYtAdXNAWDNAWCwjhynRAaCUGMJ1KSiKENfA_352.jpg",​
"email": "zhangsan.1@bytedance.com",​
"email_verified": true,​
"external_provider_user_identifier": "193133502437662693",​
"mobile": "18999999999",​
"name": "张三",​
"nick": "张三",​
"openId": "03rwqaKiS7M1KZiSY2iSW0RLwiEiE",​
"phone_number": "+8618999999999",​
"phone_number_verified": true,​
"picture": "https://static-legacy.dingtalk.com/media/lQDPM5KYNfYtAdXNAWDNAWCwjhynRAaCUGMJ1KSiKENfA_352.jpg",​
"result": {​
"active": true,​
"admin": true,​
"avatar": "https://static-legacy.dingtalk.com/media/c.jpg",​
"boss": true,​
"create_time": "2026-03-13T15:08:45.000Z",​
"department_id": [​
"1"​
],​
"dept_id_list": [​
1​
],​
"dept_order_list": [​
{​
"dept_id": 1,​
"order": 176144207254453500​
}​
],​
"email": "zhangsan.1@bytedance.com",​
"exclusive_account": false,​
"hide_mobile": false,​
"job_number": "",​
"leader_in_dept": [​
{​
"dept_id": 1,​
"leader": false​
}​
],​
"mobile": "18999999999",​
"name": "张三",​
"real_authed": false,​
"remark": "",​
"role_list": [​
{​
"group_name": "默认",​
"id": 5685758049,​
"name": "主管理员"​
},​
{​
"group_name": "默认",​
"id": 5685758051,​
"name": "负责人"​
}​
],​
"senior": false,​
"state_code": "86",​
"telephone": "",​
"title": "",​
"unionid": "KiSAznE0eyUH55qWOFGgj5giEiE",​
"userid": "193133502437662693",​
"work_place": ""​
},​
"stateCode": "86",​
"unionId": "KiSAznE0eyUH55qWOFGgj5giEiE",​
"userid": "193133502437662693",​
"visitor": false​
},​
"iat": 1780273240,​
"iss": "https://userpool-1337-1337-1337-111c-1113.auth.id.cn-beijing.volces.com",​
"locale": null,​
"name": "张三",​
"sid": "d6b1f786-f94f-40fd-a6a4-57dc60bdb4df",​
"sub": "04548453-e180-4fc1-b20c-56f5973864c5"​
}​
​
标准 JWT 字段​
​
字段​
说明​
示例值​
aud​
令牌受众,标识目标服务/客户端​
["web4", "mcp-server"]​
iss​
令牌签发方(UserPool 地址)​
sub​
令牌主体,用户的唯一标识​
"9d825e4a-9703-41d3-bf42-d5e0e6357573"​
iat​
签发时间(Unix timestamp 秒级)​
1773815043​
exp​
过期时间(Unix timestamp 秒级)​
1773818643​
azp​
授权方 Client ID​
"web4"​
sid​
会话 ID​
"b73e8f6e-3330-4791-b65b-1dd961a5c836"​
amr​
认证方法(如密码认证)​
["pwd"]​
​
特殊字段说明​
除标准 Claim 字段外,UserPool Token 额外支持以下字段:​
​
字段名​
含义​
identity_userpool_department_ids​
用户所属部门的部门 UID 列表​
identity_userpool_department_paths​
用户所属部门的部门路径列表​
identity_userpool_department_role​
用户所属部门解析出的首选 IAM Role TRN​
identity_userpool_group_uids​
用户所属用户组的组 UID 列表​
identity_userpool_groups​
用户所属用户组的 ID token 名称列表​
identity_userpool_preferred_role​
用户组解析出的首选 IAM Role TRN​
identity_userpool_roles​
用户所属用户组绑定的 IAM Role TRN 列表​
external.claims.external_provider_user_identifier​
外部身份提供商中的用户唯一标识​
custom:*​
自定义属性的值​
​
最佳实践​
  • 使用 sub 作为 UserPool 用户的稳定唯一标识;业务库里不要用邮箱、手机号、用户名做主键关联,因为这些字段可能变更或不唯一。​
  • 上游 IdP 用户标识只依赖 external.claims.external_provider_user_identifier;不要依赖 external.claims.sub、open_id、union_id 等 provider 特定字段,除非业务明确绑定某个 provider。​
  • 如果业务需要使用外部身份提供商返回的其他字段,请先定义自定义属性并配置 IDP 属性映射,再使用 token 中对应的自定义属性。external.claims 的内容受外部 Claims Propagation 配置影响,可能因 minimum、full 或 custom 策略而变化。因此,不建议将其中的其他外部 claim 作为稳定契约依赖。​
  • 组/部门授权优先使用 UID 类字段:identity_userpool_group_uids、identity_userpool_department_ids。​
Feishu external.claims 字段说明​
​
字段名​
含义​
备注​
open_id​
用户在当前应用内的唯一标识​
同一用户在不同应用里的 open_id 不同;适合做"应用内用户标识"​
union_id​
用户对同一 ISV / 同一开发者主体的唯一标识​
同一 ISV 名下多个应用可共享同一用户的 union_id;适合做"跨应用用户映射"​
user_id​
飞书用户 ID​
飞书体系内常见的用户标识,常用于通讯录/用户相关接口​
name​
用户姓名​
显示名/中文名​
en_name​
用户英文名称​
有些企业会维护英文名​
email​
用户邮箱​
敏感字段,是否返回取决于接口权限范围​
enterprise_email​
企业邮箱​
需要企业已启用飞书邮箱服务​
mobile​
用户手机号​
敏感字段,是否返回取决于权限范围​
tenant_key​
当前企业标识​
标识当前租户/企业​
employee_no​
用户工号​
与员工信息权限相关​
avatar_url / avatar_thumb / avatar_middle / avatar_big​
用户头像地址​
不同尺寸:72×72 / 240×240 / 640×640​
​
user​
详细的用户信息​
飞书接口:获取单个用户信息的响应结果​
​
Email、enterprise_email、mobile、tenant_key、employee_no、user_id 字段依赖于飞书应用权限和 auth 请求的 scopes 配置。除了 external_provider_user_identifier 字段,不建议将使用其他的任何 external.claims 字段作为稳定契约依赖​
Dingding external.claims 字段说明​
​
字段名​
含义​
备注​
nick​
用户昵称​
用户在钉钉中的昵称​
unionId​
用户的统一标识​
用于跨应用识别同一用户,是钉钉开放体系中较稳定的用户标识之一​
openId​
用户在当前应用下的开放 ID​
表示用户在当前应用维度下的标识,不同应用下可能不同​
mobile​
用户手机号​
敏感信息,是否返回取决于应用权限和用户授权​
stateCode​
手机号国家码/区号​
与 mobile 配套使用,如中国大陆为 86​
email​
用户邮箱​
是否返回受权限和授权范围影响​
department_id​
用户所属部门 ID​
数组类型,支持多部门​
result​
详细的用户信息​
钉钉接口:查询用户详情的响应结果​
​
Mobile、email 字段依赖于钉钉应用权限和请求的 scopes 配置。除了 external_provider_user_identifier 字段,不建议将使用其他的任何 external.claims 字段作为稳定契约依赖​
​​
Agent Token / Agent TIP Token​
Agent Token 面向工作负载(服务/Agent),支持通过 act 字段记录 Agent 执行链路,实现 A2A 多层级调用场景的身份追踪。​
完整示例​
​
{​
"act": {​
"sub": "AgentTest"​
},​
"aud": ["asi-gateway", "state"],​
"email": "user@example.com",​
"exp": 1773824631,​
"external.claims": {​
"department_id": ["1"],​
"mobile": "+86-13800000000",​
"nick": "张三",​
"openId": "03rwqaKiS7M1KZiSY2iSW0RLwiEiE",​
"stateCode": "86",​
"unionId": "KiSAznE0eyUH55qWOFGgj5giEiE",​
"userid": "193133502437662693",​
"visitor": false​
},​
"iat": 1773821031,​
"identity_userpool_groups": ["g_1337_test_003"],​
"iss": "https://auth.id.cn-beijing.volces.com/workloadpool/BLiW098vVD390sBo",​
"jti": "8c57df04-5403-4f4c-9a3c-286f47c6a362",​
"nbf": 1773821031,​
"sub": "534f05b5-9593-4374-ac33-eb657d63526c"​
}​
​
标准 JWT 字段​
​
字段​
说明​
示例值​
aud​
令牌受众,标识目标服务​
["asi-gateway", "state"]​
iss​
令牌签发方(WorkloadPool 地址)​
"https://auth.id.cn-beijing.volces.com/workloadpool/BLiW098vVD360sBo"​
sub​
令牌主体,工作负载/用户唯一标识​
"534f05b5-9593-4374-ac33-eb657d63526c"​
iat​
签发时间(Unix timestamp 秒级)​
1773821031​
exp​
过期时间(Unix timestamp 秒级)​
1773824631​
nbf​
生效时间(Unix timestamp 秒级)​
1773821031​
jti​
Token 唯一标识符(用于防重放)​
"8c57df04-5403-4f4c-9a3c-286f47c6a362"​
​
特殊字段说明​
除标准 Claim 字段外,Agent Token 额外支持以下字段:​
​
字段​
说明​
email​
登录用户的邮箱​
identity_userpool_groups​
登录用户的组信息​
external.claims​
联邦登录的 IDP 的原始 Token Claim 信息​
act​
执行链路上的 Agent 信息,嵌套结构,支持 A2A 的多层级调用信息,参照 RFC 8693 标准 设计​
​
Agent Delegation Chain( act) ​
act 字段是 Agent Token 的核心扩展,用于记录 Agent 的执行委托链。采用嵌套结构,最外层的 sub 表示最近执行的 Agent。​
数据结构定义:​
​
type ActClaim struct {​
Sub string `json:"sub"`​
Act *ActClaim `json:"act,omitempty"`​
}​
​
语义说明:​
​
"act": {​
"sub": "test_agent_2",​
"act": {​
"sub": "test_agent_1"​
}​
},​
"sub": "test_user"​
​
上面的例子表示:用户 test_user 发起调用,执行路径经过智能体 test_agent_1 到智能体 test_agent_2。​
调用链路解读:​
​
用户 (test_user)​
│ 发起调用请求​
▼​
Agent (test_agent_1)​
│ 转发/委托调用​
▼​
Agent (test_agent_2)​
│ 最终执行操作​
▼​
下游服务​
​
act 字段的嵌套规则: act 最外层的 sub 表示最近(最后)执行的 Agent,嵌套越深表示越早参与调用链的 Agent。调用链的起始发起者始终通过 Token 顶层的 sub 字段标识。​
如果没有 act 字段,说明当前 Agent Token 仅代表 Agent 身份,顶层的 sub 字段标识该 Agent 信息。​
​​
OIDC Token 校验逻辑​
UserPool 和 WorkloadPool 的 Token 都符合 OIDC 规范,校验流程一致。​
步骤 1:基础格式合法性校验(前置过滤)​
先排除明显无效的 Token,避免后续无意义计算:​
  1. 格式校验:​
  • ID Token 必须是 JWT 格式(三段式:header.payload.signature,用 . 分隔)​
  • 每一段必须是 Base64URL 编码(区别于普通 Base64,无 +///= 特殊字符)​
  • 解码 payload 后必须是合法 JSON(无语法错误)​
  1. 空值/篡改校验:​
  • 拒绝空 Token、长度异常的 Token(如过短/过长)​
  • 拒绝被篡改的格式(如多/少 . 分隔符)​
步骤 2:签名校验(核心防篡改)​
OIDC 最核心的校验步骤,确保 Token 由可信的授权服务器(AS) 签发,且未被篡改:​
2.1 确定签名算法(从 Header 提取)​
解码 ID Token 的 header 部分,提取 alg 字段(签名算法),常用算法:​
  • RS256:非对称加密,用公钥验签(私钥仅 AS 持有,最安全)— Agent Identity 使用此算法​
  • HS256:对称加密,用共享密钥验签(仅适合信任边界内的场景)​
禁止使用 none(无签名),属于高危漏洞。​
2.2 获取验签密钥(核心前提)​
必须从 AS 的 OIDC 发现端点(/.well-known/openid-configuration)获取公钥/密钥:​
  1. 访问 AS 的发现端点(如 https://auth.example.com/.well-known/openid-configuration)​
  1. 提取 jwks_uri 字段(如 https://auth.example.com/jwks)​
  1. 从 jwks_uri 获取 JSON Web Key Set(JWKS),包含验签用的公钥​
  1. 根据 header 中的 kid 字段确定对应的公钥​
2.3 执行签名校验​
用获取的公钥/密钥,结合 alg 算法,验证 Token 的签名是否合法。原理:AS 用私钥/共享密钥签名 Token,依赖方(RP)用公钥/共享密钥验签,验签失败则 Token 被篡改,直接拒绝。​
步骤 3:Token Claim 校验​
在这个步骤提取核心需要用的自定义字段。必选校验项 + 推荐校验项 如下:​
​
Claim 字段​
类型​
是否必选​
校验逻辑​
安全意义​
iss​
字符串​
是​
必须匹配预期的 OIDC 授权服务器地址​
防伪造 Token(来源验证)​
aud​
字符串/数组​
是​
必须包含当前依赖方(RP)的 Client ID​
防 Token 越权使用(受众验证)​
exp​
数字(秒级)​
是​
当前时间 ≤ exp(建议加 1-5 秒容错)​
防过期 Token​
iat​
数字(秒级)​
否(推荐)​
iat ≤ 当前时间,且间隔不超过合理范围(如 10 分钟)​
防超期签发的 Token​
nbf​
数字(秒级)​
否​
当前时间 ≥ nbf(若存在)​
防未生效的 Token​
sub​
字符串​
是​
非空,且在 iss 范围内唯一​
确保身份主体有效​
nonce​
字符串​
条件必选​
若授权请求中传了 nonce,则必须匹配​
防 Token 重放、CSRF​
at_hash​
字符串​
条件必选​
若返回了 Access Token,需验证哈希匹配​
确保 Access Token 与 ID Token 关联​
auth_time​
数字(秒级)​
否(推荐)​
若要求重新认证,需验证 auth_time 晚于上次认证时间​
防会话劫持​
​
步骤 4:上下文一致性校验(防重放/越权)​
即使 Token 本身合法,也需校验"使用上下文"是否匹配:​
  1. Nonce 校验(核心防重放):授权请求时 RP 生成随机 nonce 传给 AS,AS 将 nonce 写入 ID Token;校验时确保一致(用完即删)​
  1. 客户端身份校验:若 Token 包含 azp(授权方),需验证 azp 是合法的 Client ID​
  1. 认证方法校验(amr):若 RP 要求特定认证方式(如 MFA),需验证 amr 包含预期值​
  1. 会话一致性:结合 sid(会话 ID),验证 Token 所属会话未被撤销​
步骤 5:Access Token 额外校验​
若用 Access Token 访问资源,还需补充:​
  1. 格式校验:JWT 格式需验签 + Claim 校验;随机字符串需调用 AS 的 Introspection 端点验证​
  1. 权限范围校验:验证 scope 包含访问资源所需的权限(如 openid email profile)​
  1. 关联校验:通过 at_hash 验证 Access Token 与 ID Token 属于同一授权流程​
​​
附录:标准 Claim 字段参考​
核心标准 Claim 字段(按使用频率排序)​
所有标准字段均为小写(规范约定),时间类字段均为 Unix 时间戳(秒级)。​
​
字段名​
全称​
中文含义​
数据类型​
是否可选​
核心用途与注意事项​
exp​
Expiration Time​
过期时间​
数字(整数)​
可选(强烈建议用)​
Token 失效时间戳,当前时间 ≥ exp 则无效;建议设置短期(如 1 小时)​
iat​
Issued At​
签发时间​
数字(整数)​
可选​
Token 签发时间戳;可计算存活时长或验证是否在合理时间内签发​
iss​
Issuer​
签发者​
字符串​
可选​
Token 签发主体(如认证服务器域名);验证 iss 是否为预期值,防止伪造​
sub​
Subject​
主题​
字符串​
可选​
Token 面向的核心主体(如用户 ID);在 iss 范围内需唯一​
aud​
Audience​
受众​
字符串/字符串数组​
可选​
Token 的接收/使用主体;需验证自己是否在 aud 列表中​
nbf​
Not Before​
生效时间​
数字(整数)​
可选​
Token 开始生效的时间戳,当前时间 < nbf 则无效​
jti​
JWT ID​
唯一标识符​
字符串​
可选​
Token 全局唯一标识(如 UUID);防重放攻击或结合黑名单撤销 Token​
​
重点总结​
  1. 核心标准字段:exp(必用)、iat、iss 是最常用的三个,覆盖"过期、签发、来源"核心验证​
  1. 安全关键:exp 控制过期,jti 防重放,aud 防越权,按需组合使用​
  1. 格式要点:时间字段用秒级 Unix 戳,标准字段小写,避免和自定义字段冲突​
示例:包含标准 Claim 的 JWT Payload​
​
{​
"iss": "https://auth.my-app.com",​
"sub": "user_123456",​
"aud": ["service-order", "service-user"],​
"exp": 1713456000,​
"iat": 1713452400,​
"nbf": 1713452400,​
"jti": "f89e7d8a-9c7b-4e5d-8a7b-9f8e7d6c5b4a",​
"role": "admin"​
}​
​
验证逻辑顺序​
接收方解析 JWT 时,建议按以下顺序验证:​
  1. nbf(若有):当前时间 ≥ nbf​
  1. exp(若有):当前时间 < exp​
  1. iss/aud(若有):匹配预期的签发者/受众​
  1. 最后验证签名,再使用 sub/act 等字段​
最近更新时间:2026.07.13 16:31:10
这个页面对您有帮助吗?
有用
有用
无用
无用