ID Token 是什么

一句话总结

ID Token 是 OIDC 签发的”数字身份证”——一个 JWT 格式的令牌,里面写着你叫什么、邮箱是什么、谁签发的、什么时候过期。SP 读到它就知道你是谁。


🤔 为什么会有它 / 解决了什么问题

OAuth 2.0 的 Access Token 只管”能不能进”,不管”进来的是谁”。OIDC 加了一个 ID Token,专门回答”你是谁”这个问题。两者各司其职:

ID TokenAccess Token
作用证明身份(你是谁)授权访问(能干什么)
给谁看SP(前端验证)Resource Server(API)
格式JWT,可解码通常是不透明字符串
包含name, email, subscopes, permissions

🔍 具体原理 / 运作逻辑

ID Token 是一个 JWT(JSON Web Token),由 IDP 用密钥签名。Frappe 用 HS256(client_secret 当 HMAC 密钥)签名。

SP 拿到 ID Token 后做三件事:

  1. 验签:用同样的密钥验证签名,确保没被篡改
  2. 检查过期exp 字段必须在未来
  3. 检查接收方aud 字段必须是自己的 client_id

一个典型的 Frappe ID Token 解码后长这样:

{
  "sub": "user@example.com",
  "name": "张三",
  "email": "zhangsan@example.com",
  "given_name": "三",
  "family_name": "张",
  "iss": "https://gottenergy.getgrowth.app",
  "aud": "grafana-client-id",
  "iat": 1752000000,
  "exp": 1752003600
}

🧭 什么情况下会用到 / 什么场景会遇到它

  • 配置 Grafana OIDC 时,Grafana 就是读 ID Token 来识别用户的
  • 调试 SSO 失败时,可以用 jwt.io 解码 ID Token 看里面有什么

🔗 关联 / 经常一起出现的概念

  • OIDC:ID Token 是 OIDC 协议的核心产物
  • Access Token:ID Token 的兄弟,一个管身份一个管权限
  • Authorization Code Flow:ID Token 在这个流程的最后一步被签发
  • PKCE:保护 Authorization Code Flow,间接保护 ID Token 不被窃取

⚠️ 注意事项 / 常见误区

  • ID Token 不是用来调 API 的,调 API 用 Access Token
  • ID Token 里有个人信息,不要在日志里打印全文
  • Frappe 签名算法是 HS256,不是所有 SP 都默认支持(有的只认 RS256)

📎 记忆锚点

ID Token = 身份证。上面有你的名字和照片,有公安局的钢印防伪。Access Token = 房卡,没有名字只有权限。


📝 更新日志

日期改动原因
2026-07-09首次创建Frappe SSO/OIDC 集成准备