NIP-98 定义了使用 Nostr event 进行 HTTP 认证。它允许服务器在标准 HTTP 请求上验证客户端的 Nostr 身份,而无需密码、API 密钥或 OAuth 流程。

工作原理

当客户端需要认证 HTTP 请求时,它创建一个 kind 27235 event。该 event 在其 tag 中包含目标 URL 和 HTTP 方法,将认证绑定到特定请求。

{
  "id": "<64-char hex>",
  "pubkey": "<64-char hex>",
  "created_at": 1742860800,
  "kind": 27235,
  "tags": [
    ["u", "https://files.example.com/upload"],
    ["method", "POST"],
    ["payload", "<sha256-hash-of-request-body>"]
  ],
  "content": "",
  "sig": "<128-char hex>"
}

客户端签署此 event,对其进行 base64 编码,并在 HTTP Authorization 头中以 Nostr 方案发送:

Authorization: Nostr <base64-encoded-signed-event>

服务器解码 event,验证签名,检查 URL 和方法是否与实际请求匹配,并确认时间戳是近期的。如果所有检查通过,服务器即知道哪个 Nostr pubkey 发出了该请求。

可选的 payload tag 包含请求体的 SHA-256 哈希,防止 auth event 被用于不同的内容。时间戳检查(服务器通常拒绝几分钟前的 event)防止重放攻击。

使用场景

Blossom 服务器使用 NIP-98 对文件上传和删除进行认证,将存储的媒体与特定 Nostr 身份绑定。文件托管服务使用它来执行每个 pubkey 的上传配额。任何需要识别 Nostr 用户而无需维护自身账户系统的 HTTP API 都可以接受 NIP-98 头作为身份证明。


主要来源:

提及于: