本文档由 石墨办公 提供。
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_here