Skip to Content
核心概念DSN 与 HMAC 签名

DSN 与 HMAC 签名

DSN

接入任何 Argus SDK 都需要一个 DSN(Data Source Name),在 Console 创建项目时自动颁发:

argus://<public_key>:<secret_key>@<host>[:port]/<project_id>
片段含义
public_key公钥,随上报放进 X-Argus-DSN
secret_key密钥,仅用于本地 HMAC 签名,不出网
host[:port]上报端点;:443 走 https,否则 http;本地默认 localhost:4318
project_id数据归属的项目

HMAC-SHA256 签名

每个上报请求都用 secret_key本地签名(密钥不出网)。规范如下,跨 ingestion 与所有 SDK(Go / TypeScript / Swift / Kotlin / Dart)逐字节一致

canonical = METHOD + "\n" + PATH + "\n" + TIMESTAMP + "\n" + sha256_hex(BODY) X-Argus-Auth = "HMAC-SHA256=" + base64( HMAC-SHA256(secret_key, canonical) )

请求头:

X-Argus-DSNpublic_key
X-Argus-Timestamp当前 epoch (服务端 ±300s 防重放,须为真实时间)
X-Argus-Auth上面算出的签名

两个时间戳别混:签名头 X-Argus-Timestamp 是 epoch (鉴权);日志 / 事件条目里的 ts 是 epoch 毫秒(数据时间戳)。

跨语言一致性

各端 SDK 的签名实现都对同一份参考 fixture 做 CI 校验 (sdks/common-protocol/testdata/hmac-fixtures.json), 保证 Go(后端)、TypeScript(Web)、Dart(Flutter)等签出的请求字节一致。后端日志 shipper 的 sign() 也与独立实现交叉验证过——任何语言按上面的 canonical 公式即可自行实现。

完整协议见 docs/07-design/sdk-protocol.md §5、后端接入指南 docs/07-design/backend-log-ingestion.md