Token 是你的应用签发、你的应用校验,石墨原样透传的 Token 到你的回调接口。Token 是否合法性,这意味着 Token 的格式和密钥完全由你掌握,安全模型也完全由你负责。Token 解决的是“石墨回调过来时,你的应用如何知道这是哪个用户、哪个业务上下文”的问题,整个签发和校验流程大概如下所示:Token 与 Signature 最本质的区别——Signature 是石墨当校验者,Token 是你的应用既当签发者也当校验者。Token 由后端签发。前端不持有任何密钥,每次需要就向后端取一次新的。Token = 你给出去的那个 Token。石墨拿到什么就回什么——这同时意味着,一旦签发出去,在它过期前会随每次相关回调反复被使用。Token 必须能让你的应用识别出"这次回调来自哪个业务用户"。一般做法是把用户 id 编码进 Token字段中,(不要直接编码用户名、邮箱、手机号这类敏感字段,需要的话用用户 id 去查):{
"uid": "user_123"
}{
"uid": "user_123",
"tenantId": "tenant_42"
}Token,你可以借这条通道把"调用上下文"原样传到回调侧。最常见的用法是 trace_id(链路追踪 id)——以导入为例:Token 里的典型字段:| 字段 | 用途 |
|---|---|
uid / userId | 必含。识别业务用户 |
tenantId | 多租户场景识别租户 |
trace_id | 把"前一跳的调用上下文"传到回调侧 |
exp / iat | 过期与签发时间(推荐用 JWT 的标准字段) |
scope | 标记本次签发的权限范围(如"仅可读") |
Token 的信息:明文密码、明文身份证、明文手机号、信用卡号、API 密钥等。Token 在网络中流转,一旦泄露这些信息会跟着泄露。Token 格式没有要求,下面三种是常见的实现层级,按"安全 vs 复杂度"递增。生产 环境推荐方式二(JWT),足够覆盖绝大多数接入需求。| 方案 | 安全级别 | 实现复杂度 | 性能 | 可调试性 | 推荐场景 |
|---|---|---|---|---|---|
| JSON 明文 | ⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 开发联调、内网验证 |
| JWT 签名(推荐) | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 生产环境通用 |
| AES-256-GCM 加密 | ⭐⭐⭐⭐⭐ | ⭐ | ⭐⭐⭐ | ⭐ | 合规要求高、载荷需保密 |
Token。{
"uid": "user_123",
"traceId": "aabbccdd123456",
"timestamp": 1640995200000
}Token 内容。Token 都能伪造、改造一个新的塞进去。Token的 secret 一定要和Signature的 secret 分开。Signature的 secret 是石墨派发给你的应用接入凭证;Token的 secret 是你的应用内部自留的,石墨从不接触。两者混用一旦其中一个泄露,另一个的安全模型就全部塌掉。
Token 形如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJ1c2VyXzEyMyIsInRyYWNlSWQiOiJhYWJiY2NkZDEyMzQ1NiIsImV4cCI6MTY0MDk5NTIwMCwiaWF0IjoxNjQwOTkxNjAwLCJpc3MiOiJ5b3VyLWFwcC1uYW1lIn0.signature_hash_heresecretKey 长度需为 32 字节(AES-256)。示例里用 SHA-256 派生是常见做法。X-WebOffice-Token 之后,至少要经过如下流程校验:Token 内部最好带 exp,校验时拒绝过期。建议生命周期与浏览器会话同量级(如 30 分钟到 2 小时),不要给得太长。Token 立即失效。常见做法:服务端维护一张吊销表,校验时查一次;或者 Token 里塞 sessionId,校验时确认 session 仍活跃。Token 通过只能证明"来源合法",不能证明"该用户对当前文件有权限"。文件级权限校验应放在 Token 校验之后,由你的应用业务侧再判一次。401,业务拒绝用 403。详细原因见 签名凭证:Signature 与 Token。| 误区 | 实际影响 | 正确做法 |
|---|---|---|
在前端直接用密钥签 Token | 密钥泄露,任何人都能伪造 Token | Token 一律由你的应用后端签发,前端只拿结果 |
Token 用明文 JSON 上生产 | 任何人改造载荷都能冒充用户 | 至少升级到 JWT 签名(方式二) |
Token 与 Signature 共用同一个 secret | 一处泄露=两处全塌 | 两套 secret 物理分开、分开轮换 |
Token 里直接塞手机号 / 邮箱 / 身份证 | 一次泄露 PII 跟着泄露 | 只放 id,敏感信息你的应用按 id 自己查 |
| 不带过期时间 | 一旦泄露永久可用 | 加 exp 字段,建议 ≤ 2 小时;同时维护吊销表 |
用户登出后 Token 仍能调通回调 | 离职 / 撤权后还能继续操作 | 维护 sessionId + 吊销表,校验时联动 |
Token 校验只判"格式对" | 改个 uid 就能冒充别的用户 | 必须校验签名(HMAC 或 GCM AAD),不只看结构 |
把 Token 当业务幂等键 | 同一会话内多次回调 Token 相同,幂等键失效 | 幂等键用业务事件 id / trace_id,不要用 Token |
| AES-GCM 复用同一 IV | 安全性直接归零 | 每次加密生成 12 字节随机 IV,不复用 |
同一个 Token 被多个用户复用 | 当前用户回调返回错人 | Token 与用户一一绑定,会话维度签发 |