Khóa API
Khóa API là phương thức chính để xác thực với API của Brevo. Chúng mang lại một cách đơn giản và an toàn để truy cập tài khoản của bạn bằng chương trình.
Khóa API là gì?
Khóa API là những định danh duy nhất dùng để xác thực ứng dụng của bạn khi gửi yêu cầu tới API của Brevo. Mỗi khóa là một chuỗi 64 ký tự, vừa đóng vai trò định danh vừa đóng vai trò mật khẩu.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4Tạo khóa API
Hướng dẫn từng bước
- Đăng nhập vào Brevo: Truy cập bảng điều khiển Brevo của bạn
- Đi tới Settings: Nhấp vào hồ sơ của bạn → Settings
- Vào API Keys: Chọn “API Keys” từ menu bên trái
- Tạo khóa mới: Nhấp “Generate a New API Key”
- Đặt tên cho khóa: Đặt một tên mô tả rõ ràng (ví dụ: “Production App”, “Development Testing”)
- Thiết lập quyền: Chọn mức truy cập phù hợp
- Tạo khóa: Nhấp “Generate” và sao chép khóa ngay lập tức
Quy ước đặt tên khóa API
Hãy dùng những tên mô tả giúp bạn nhận ra mục đích của khóa:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
Các loại khóa API và quyền
Khóa toàn quyền
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefullyKhóa chỉ đọc
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited accessKhóa chỉ gửi
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsKhóa quản lý liên hệ
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationSử dụng khóa API
Xác thực qua header
Đưa khóa API của bạn vào header api-key:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYVí dụ mã nguồn
JavaScript/Node.js
const brevo = require('@getbrevo/brevo');
const apiInstance = new brevo.AccountApi();apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);
// Make authenticated requestapiInstance.getAccount() .then(data => console.log('Account info:', data)) .catch(error => console.error('Error:', error));Python
import sib_api_v3_sdkfrom sib_api_v3_sdk.rest import ApiException
# Configure API keyconfiguration = sib_api_v3_sdk.Configuration()configuration.api_key['api-key'] = 'YOUR_API_KEY'
# Create API instanceapi_instance = sib_api_v3_sdk.AccountApi(sib_api_v3_sdk.ApiClient(configuration))
try: # Get account info api_response = api_instance.get_account() print(api_response)except ApiException as e: print("Exception when calling AccountApi->get_account: %s\n" % e)PHP
<?phprequire_once(__DIR__ . '/vendor/autoload.php');
// Configure API key$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');
// Create API instance$apiInstance = new SendinBlue\Client\Api\AccountApi( new GuzzleHttp\Client(), $config);
try { $result = $apiInstance->getAccount(); print_r($result);} catch (Exception $e) { echo 'Exception when calling AccountApi->getAccount: ', $e->getMessage(), PHP_EOL;}?>Ruby
require 'sib-api-v3-sdk'
# Configure API keySibApiV3Sdk.configure do |config| config.api_key['api-key'] = 'YOUR_API_KEY'end
# Create API instanceapi_instance = SibApiV3Sdk::AccountApi.new
begin # Get account info result = api_instance.get_account puts resultrescue SibApiV3Sdk::ApiError => e puts "Exception when calling AccountApi->get_account: #{e}"endBảo mật khóa API
Lưu trữ an toàn
Biến môi trường (khuyến nghị)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;Trình quản lý secret trên cloud
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
Thực hành bảo mật tốt nhất
-
Không bao giờ hardcode khóa
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
Dùng khóa khác nhau cho từng môi trường
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
Xoay vòng khóa định kỳ
- Đặt nhắc nhở trên lịch để xoay vòng hằng quý
- Dùng công cụ tự động hóa cho việc xoay vòng khóa
- Chuẩn bị sẵn một phương án quay lui
-
Theo dõi việc sử dụng khóa
- Thiết lập cảnh báo cho hoạt động bất thường
- Xem lại nhật ký sử dụng khóa hằng tháng
- Theo dõi các mẫu truy cập theo khu vực địa lý
Quản lý khóa
Theo dõi khóa đang hoạt động
Theo dõi các khóa đang hoạt động của bạn trong bảng điều khiển:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: ActiveQuy trình xoay vòng khóa
- Tạo khóa mới: Tạo khóa thay thế
- Cập nhật cấu hình: Triển khai với khóa mới
- Theo dõi: Đảm bảo khóa mới hoạt động đúng
- Thời gian ân hạn: Giữ khóa cũ hoạt động trong 24 đến 48 giờ
- Thu hồi khóa cũ: Xóa khóa trước đó
Thu hồi khóa khẩn cấp
Nếu một khóa bị lộ:
- Thu hồi ngay lập tức: Xóa khóa khỏi bảng điều khiển
- Tạo khóa thay thế: Tạo khóa mới ngay
- Cập nhật ứng dụng: Triển khai với khóa mới càng sớm càng tốt
- Theo dõi hoạt động: Kiểm tra xem có việc sử dụng trái phép không
- Báo cáo sự cố: Ghi lại sự cố bảo mật này
Giới hạn tần suất và khóa API
Mỗi khóa API có giới hạn tần suất riêng:
- Gói Free: 300 yêu cầu/ngày
- Gói Starter: 20.000 yêu cầu/ngày
- Gói Business: 50.000 yêu cầu/ngày
- Gói Enterprise: Giới hạn tùy chỉnh
Header giới hạn tần suất
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200Xử lý giới hạn tần suất
async function makeApiCall() { try { const response = await fetch(url, { headers });
if (response.status === 429) { const resetTime = response.headers.get('X-RateLimit-Reset'); const waitTime = resetTime - Math.floor(Date.now() / 1000);
console.log(`Rate limited. Waiting ${waitTime} seconds`); await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
// Retry the request return makeApiCall(); }
return response.json(); } catch (error) { console.error('API call failed:', error); throw error; }}Khắc phục sự cố khóa API
Các thông báo lỗi thường gặp
Khóa API không hợp lệ (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}Không đủ quyền (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}Vượt quá giới hạn tần suất (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}Danh sách kiểm tra khi gỡ lỗi
- Khóa được định dạng đúng (64 ký tự)
- Không có khoảng trắng thừa hoặc ký tự ẩn
- Khóa có đủ quyền cần thiết
- Khóa đang hoạt động (chưa bị thu hồi)
- Vẫn trong giới hạn tần suất
- Dùng đúng endpoint API
- Header được định dạng đúng
Bước tiếp theo
- Tìm hiểu về OAuth 2.0
- Tìm hiểu về token JWT
- Khám phá giới hạn tần suất
- Dùng thử các SDK