主题

签名 OG 图片 URL

签名 OG 图片 URL 是一种参数受 HMAC-SHA256 签名保护的 URL,因此只有您(以及持有您密钥的代码)才能请求计入月度配额的渲染。FastOG 对内容进行签名——相同的参数始终生成相同的、可缓存的 URL——这既保护了您的配额,又使缓存具有确定性。

为什么需要对 OG 图片 URL 进行签名

一个能够从未经认证的 URL 渲染任意文本的 OG 图片端点,相当于一个任何人都可以调用的免费渲染农场。在基于订阅的服务中,这意味着任何人都可能消耗你的余额。使用仅你的后端知晓的密钥对每个 URL 进行签名,可以在首次(未缓存)请求时阻止所有未经授权的请求,而合法的、已缓存的 URL 则继续正常工作。

内容签名的工作原理

  1. 构建规范查询字符串:除签名外的所有参数,按排序并使用 RFC-3986 编码。
  2. 计算 HMAC_SHA256(secret, "GET/api/v1/og\n" + canonical)。
  3. 将签名作为 s 参数附加。

消息中不包含时间戳,因此 URL 是稳定的:相同的参数 → 相同的 URL → 相同的缓存条目。

canonical = "key=sk_...&template=default&title=Hello"
signature = HMAC-SHA256(secret, "GET/api/v1/og\n" + canonical)
url = ".../api/v1/og?key=...&template=default&title=Hello&s=" + signature

人们常搞错的权衡

顾虑 实际情况
“签名 URL 会过期” 不会——它是内容签名的,在您轮换密钥之前一直有效
“被篡改的 URL 会破坏缓存” 不会——无效的 s 只在缓存未命中时返回 401;已缓存的图片照常返回
“我需要时间戳来保证安全” 内容签名足以阻止配额滥用;无需时钟

单文件 SDK

FastOG 为每种语言提供一个独立的签名器文件(零依赖),因此您无需手动实现 HMAC。您可以从 SDK 页面 下载,或直接从 CDN 获取 curl:

bash
curl -O https://fastog.com/sdk/node.js

常见问题解答

签名 URL 会过期吗?

默认不会——在您轮换 API 密钥的 HMAC 密钥之前,它们一直有效。签名基于内容,而非时间。

其他人能否通过猜测 URL 来消耗我的配额?

不能。他们需要您的 HMAC 密钥才能生成有效签名;没有它,未缓存的渲染将返回 401 invalid_signature。

我是否在浏览器中签署 URL?

不需要。请在服务端(或边缘函数中)签名,确保密钥永远不会发送到客户端。渲染后的图片 URL 可以安全地放入您的公开 <head> 中。

免费试用——无需注册

在几秒钟内预览和测试动态 OG 图片。

打开免费的 OG 图片测试器

A BeCaSimulations site