Xác thực HMAC & Bảo mật
Bảo mật các URL hình ảnh OG được ký bằng HMAC của bạn với xác thực HMAC-SHA256 của FastOG. Hướng dẫn này bao gồm việc ký, xác thực và xử lý sự cố cho mọi yêu cầu, để bạn có thể phân phối hình ảnh Open Graph động ngay lập tức — giới hạn theo đăng ký, với số lần render không giới hạn (không có hạn mức render hàng tháng và không tính phí vượt hạn mức). Đăng ký, chọn gói API Dynamic, sau đó tạo khóa API và bí mật HMAC trong bảng điều khiển (các lần render API trả phí đều sạch). Ký trên máy chủ của bạn một lần và tích hợp trong vài phút.
🚀 Bắt đầu nhanh
Mới làm quen với chữ ký HMAC? Bắt đầu tại đây:
- Hướng dẫn bắt đầu nhanh — Thiết lập và chạy trong 5 phút
- Hướng dẫn JavaScript — Hướng dẫn đầy đủ cho nhà phát triển Node.js/Next.js
- Tất cả hướng dẫn theo framework — chọn stack của bạn:
📚 Mục lục Tài liệu
Khái niệm cốt lõi
- Hướng dẫn chữ ký HMAC — Tài liệu tham khảo đầy đủ với chi tiết thuật toán, yêu cầu và ví dụ bằng JavaScript, PHP và Python
- Xác thực HMAC — Chi tiết triển khai phía máy chủ, tính năng bảo mật và phản hồi lỗi
Hướng dẫn
-
Hướng dẫn JavaScript/Node.js — Hướng dẫn toàn diện bao gồm:
- Bắt đầu nhanh (5 phút)
- Next.js App Router (3 mẫu)
- Next.js Pages Router
- Backend Express.js
- Vanilla Node.js
- Các mẫu tích hợp Frontend (SSG, SSR, Client-Side)
- Kiểm thử và gỡ lỗi
- Các lỗi thường gặp
Tham khảo nhanh
Thuật toán
method = "GET"
path = "/api/v1/og"
canonicalQuery = every query param EXCEPT `s` (including `key`): array values sorted too; each pair rfc3986Encode(key)=rfc3986Encode(value); pairs sorted lexicographically and joined with "&"
message = method + path + "\n" + canonicalQuery
signature = hex(HMAC-SHA256(message, hmac_secret))
URL: /api/v1/og?title=Hello&key=sk_quick_123abc&s=<signature>
Tham số truy vấn
| Tham số | Mô tả | Ví dụ |
|---|---|---|
key |
Khóa API đầy đủ | sk_quick_123abc |
s |
Chữ ký HMAC-SHA256 (64 ký tự hex) | 9f8a1b2c3d4e... |
Mã lỗi
| Mã | Trạng thái HTTP | Mô tả |
|---|---|---|
missing_signature |
401 | Thiếu tham số key hoặc s |
invalid_signature |
401 | Chữ ký không khớp |
🎯 Các trường hợp sử dụng
Bài viết blog
Tạo OG image động cho các bài viết blog:
const ogUrl = generateSignedOgUrl({
template: "blog",
title: post.title,
subtitle: post.excerpt,
author: post.author.name,
});
// <meta property="og:image" content="{ogUrl}" />
Sản phẩm thương mại điện tử
Tạo OG image cho các trang sản phẩm:
const ogUrl = generateSignedOgUrl({
template: "ecommerce",
title: product.name,
price: product.price,
image: product.image,
});
Lời chứng thực
Tạo OG image cho các trích dẫn lời chứng thực:
const ogUrl = generateSignedOgUrl({
template: "testimonial",
author_name: user.name,
author_avatar: user.avatarUrl,
quote: user.bio,
});
🔐 Bảo mật
Các phương pháp tốt nhất
- Lưu trữ bí mật an toàn — Sử dụng biến môi trường hoặc trình quản lý bí mật
- Không bao giờ để lộ bí mật HMAC trong mã phía máy khách — Chỉ ký trên máy chủ
- Sử dụng HTTPS — Ngăn chặn các cuộc tấn công MITM
- Xoay vòng bí mật định kỳ — Đặc biệt nếu bị xâm phạm
- Giám sát các chữ ký thất bại — Các lần thất bại lặp lại có thể cho thấy dấu hiệu tấn công
- Cô lập theo từng người dùng — Mỗi khóa API có bí mật HMAC riêng
Lấy bí mật HMAC của bạn
- Đi tới Bảng điều khiển → Khóa API
- Tạo một khóa API mới
- Sao chép Bí mật HMAC (chỉ hiển thị một lần!)
- Lưu trữ trong biến môi trường
# .env
FASTOG_HMAC_SECRET=<your-64-char-hex-secret>
🧪 Kiểm thử
Tạo URL kiểm thử
# Node.js
node -e "
const crypto = require('crypto');
const enc = (s) => encodeURIComponent(s).replace(/[!'()*]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase());
const all = { title: 'Test', key: 'sk_quick_123abc' };
const pairs = [];
for (const [k, v] of Object.entries(all)) for (const vv of Array.isArray(v) ? v : [v]) pairs.push(enc(k) + '=' + enc(vv));
pairs.sort();
const canonical = pairs.join('&');
const sig = crypto.createHmac('sha256', 'YOUR_HMAC_SECRET').update('GET/api/v1/og\n' + canonical).digest('hex');
console.log('https://fastog.com/api/v1/og?title=Test&key=sk_quick_123abc&s=' + sig);
"
Kiểm thử bằng curl
curl "https://fastog.com/api/v1/og?title=Test&key=sk_quick_123abc&s=<signature>"
Phản hồi dự kiến
- ✅ Chữ ký hợp lệ → Trả về ảnh OG (hoặc 422 nếu tham số mẫu không hợp lệ)
- ❌ Chữ ký không hợp lệ →
{"code": "invalid_signature"} - ❌ Thiếu tham số →
{"code": "missing_signature"}
🛠 Xử lý sự cố
Chữ ký không khớp
- Xác minh bạn đang sử dụng đúng khóa bí mật HMAC (kiểm tra khóa API trong bảng điều khiển)
- Kiểm tra truy vấn chuẩn: mọi tham số truy vấn ngoại trừ
s(bao gồm cảkey), giá trị được mã hóa theo chuẩn rfc3986, các khóa được sắp xếp theo thứ tự từ điển - Xác minh chữ ký là dạng hex chữ thường (64 ký tự)
📖 Tài Nguyên Bổ Sung
- Tài Liệu Tham Khảo API — Tài liệu API đầy đủ
- Các Thực Hành Bảo Mật Tốt Nhất — Hướng dẫn bảo mật chi tiết
- Cơ Sở Kiến Thức — Chi tiết triển khai kỹ thuật
❓ Câu hỏi thường gặp
Q: Tại sao dùng tham số truy vấn thay vì header?
A: Ảnh OG được tải bởi các trình thu thập dữ liệu của mạng xã hội (LinkedIn, Twitter, Facebook) vốn không gửi header tùy chỉnh. Chữ ký BẮT BUỘC phải nằm trong URL.
Q: Tôi có thể dùng cùng một chữ ký cho nhiều yêu cầu không?
A: Có. Chữ ký được tính từ truy vấn chính xác (trừ s), vì vậy URL đã ký vẫn hợp lệ miễn là các tham số không thay đổi. Thay đổi bất kỳ tham số nào (bao gồm cả key) thì bạn phải ký lại.
Q: Tôi có cần ký yêu cầu cho tất cả các mẫu không?
A: Có. Tất cả yêu cầu đến /api/v1/og đều yêu cầu chữ ký HMAC.
Q: Điều gì xảy ra nếu bí mật HMAC của tôi bị lộ?
A: Thu hồi khóa API trong bảng điều khiển và tạo khóa mới. Mỗi khóa API có bí mật HMAC riêng.
Q: Tôi có thể tắt xác thực HMAC cho các dịch vụ nội bộ không?
A: Liên hệ bộ phận hỗ trợ để có giải pháp tùy chỉnh. Xác thực HMAC là bắt buộc đối với tất cả các điểm cuối API công khai.
🆘 Hỗ trợ
Cần trợ giúp?
- Xem Hướng dẫn JavaScript để có các ví dụ mã hoàn chỉnh
- Tham khảo Hướng dẫn chữ ký HMAC để biết chi tiết về thuật toán
- Liên hệ bộ phận hỗ trợ tại [email protected]
Liên quan
- Tài liệu — Tất cả hướng dẫn và tài liệu tham khảo của FastOG
- Trình kiểm tra OG Image miễn phí — Xem trước mà không cần tài khoản
- Hướng dẫn bắt đầu nhanh — Bắt đầu chỉ trong 5 phút
- Hướng dẫn chữ ký HMAC — Chi tiết thuật toán
- Xác thực HMAC — Xác thực phía máy chủ