本文档由 石墨办公 提供。
X-WebOffice-Signature) 和 Token (X-WebOffice-Token) 分别承担其中一边的鉴权。Signature。Signature 由 appId 和 secret 并结合特定的算法生成,只有合法的接入方才能签出有效的 Signature。Token。Token 由你的应用提前签发并由石墨透传回来,里面还可以嵌入用 户 id 这类业务信息。Token,这种场景下你的应用也需要支持使用 Signature 的方式来完成对来自石墨文档请求的鉴权。X-WebOffice-Signature(以下简称 Signature)和 X-WebOffice-Token(以下简称 Token)两种类型:| 凭证类型 | Header 名 | 主要作用 | 其他作用 |
|---|---|---|---|
| Signature | X-WebOffice-Signature | 石墨文档中台 用来校验外部请求是否合法 | 某些场景下石墨无法提供 Token,因此你的应用回调接口也需支持通过 X-WebOffice-Signature 校验请求来自石墨 |
| Token | X-WebOffice-Token | 你的应用 校验来自石墨文档中台的请求是否合法 | 携带接入方需要透传的信息,例如用户 id 等 |
具体接口是否携带 Signature或Token,以及携带哪种 / 几种,请查阅对应接口文档。下文给出的是最典型的两种场景。
| 维度 | Signature | Token |
|---|---|---|
| 签发者 | 你的应用(基于 appId、secret 生成) | 你的应用(用自定义业务规则) |
| 校验者 | 石墨文档中台后端; 你的应用后端(仅主动通知场景) | 你的应用后端 |
| 是否携带业务信息 | 否 | 是(可携带用户 id、租户 id 等信息) |
| 生命周期 | 短(一般几分钟到几十分钟,有参数里的 ts 决定) | 你的应用自行决定,建议短期 |
| 主要风险 | 时钟漂移、secret 泄露 | 重放攻击、Token 泄露 |
Signature + Token,再交给石墨 JS SDK;JS SDK 用它们去调石墨,石墨回调你的应用时把 Token 原样带回来。Signature 由你的应用后端签发,前端不持有 secret,避免泄露。Token 由石墨透传回来,你的应用回调接口直接验自己签的内容即可。signature + token,过期了重新换。Token 信息:Signature,由你的应用后端用同一对 appId + secret 来校验请求是否合法。Signature 完成鉴权,不能假设一定能拿到 Token。Signature + Token 双凭证(典型场景)"和"仅 Signature(主动通知)"两种入站方式,按 Header / Credential-Type 自动分支。X-WebOffice-Credential-Type 与 Token 是否存在做分支,不为每种事件单独配 URL。Signature 校验要带 ts。用 appId + secret + ts + nonce 这类参数生成签名,校验时比对计算结果,同时 拒绝 ts 偏离当前时间过大(建议 ±5 分钟)的请求。Token 自己签自己验。Token 是你的应用签发的(JWT / HMAC / 自定义都行),校验只跟你的应用密钥相关。Token 里塞业务上下文(如 userId / tenantId)时记得只放 id 不放敏感数据。401(鉴权信息缺失或无效)/ 403(鉴权通过但业务上拒绝);不要返回 5xx,会让石墨当成自己出问题而无意义重试。co18-03-02-Signature-签名.md)co18-03-03-Token-与回调鉴权.md)appId + secret 写进配置时,按 co18-03-05-安全上线清单.md 的要求保护好密钥。| 误区 | 实际影响 | 正确做法 |
|---|---|---|
在前端持有 secret 直接签 Signature | secret 泄露后整个接入身份被人冒用 | Signature 一律由你的应用后端签发,前端只拿结果 |
假设石墨回调一定带 Token | 主动通知场景没有 Token,被回调接口直接拒绝,事件丢失 | 同一入口支持"Signature + Token"和"仅 Signature"两条分支 |
| 校验失败返回 200 | 石墨判定送达成功,不再重试,事件永久丢失 |