Signature 是你的应用接入身份的凭证。它由 appId + appSecret 派生,最常被石墨用来校验"这次请求确实来自你的应用";在石墨主动通知你的应用的场景里,它也是你的应用反向验真的唯一线索。Signature 出现在两条链路上,方向相反、校验侧不同:Signature 不携带业务信息,里面只有"我是谁(kid)+ 什么时候过期(exp)+ 必要时的 scope / fileId"。业务上下文请放进 Token。Signature 是短期凭证。过期时间越长,泄露后的爆炸半径越大;建议默认几分钟到 10 分钟内。注意:部分高敏感接口要求 exp ≤ 5 分钟。appSecret 永远不离开你的应用后端:不进前端、不进 App、不写日志、不进静态配置、不进代码仓库。Signature 是一个标准 JWT,三段式:Header . Payload . Signature
xxxxx . yyyyy . zzzzzkid 必填——它就是你的 appId,石墨用它定位用哪把 appSecret 校验。{
"alg": "HS256",
"typ": "JWT",
"kid": "your_app_id"
}{
"exp": 1612411882,
"scope": "license",
"fileId": "file_123"
}| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
exp | number | 是 | 过期时间,秒级时间戳。校验逻辑:当前秒 < exp 才有效 |
scope | string | 否 | 接口访问范围。调用 license / 系统管理类接口时必须带 "license" |
fileId | string | 否 | 文件标识。仅 /admin 类接口需要,用来把签名作用范围限定到单文件 |
exp 一定要"秒"。是 JWT 标准里默认的单位。kid 必须落在 Header,不要塞到 Payload。exp 校验对偏差敏感,建议所有节点跑 NTP,控制偏差在 ±2 分钟内。appSecret 从配置中心 / KMS 读取,不要硬编码。<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>