---
title: "Khóa API | Tajo"
description: "Hướng dẫn đầy đủ về xác thực bằng khóa API với Brevo"
url: https://tajo.io/vi/docs/authentication/api-keys/
markdown: https://tajo.io/vi/docs/authentication/api-keys.md
lang: vi-VN
author: "Set Noa"
author_url: https://tajo.io/vi/set-noa/
robots: noindex
---

Đăng ký quyền truy cập sớm

Nhập tên và địa chỉ email công việc của bạn. Chúng tôi sẽ gửi liên kết để xác nhận yêu cầu truy cập Tajo.

# Khóa API

[Set Noa](https://tajo.io/vi/set-noa/)

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-Ab1Cd2Ef3Gh4
```

## Tạo khóa API

### Hướng dẫn từng bước

1. **Đăng nhập vào Brevo**: Truy cập [bảng điều khiển Brevo](https://app.brevo.com/) của bạn
2. **Đi tới Settings**: Nhấp vào hồ sơ của bạn → Settings
3. **Vào API Keys**: Chọn “API Keys” từ menu bên trái
4. **Tạo khóa mới**: Nhấp “Generate a New API Key”
5. **Đặt tên cho khóa**: Đặt một tên mô tả rõ ràng (ví dụ: “Production App”, “Development Testing”)
6. **Thiết lập quyền**: Chọn mức truy cập phù hợp
7. **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-app`
- `staging-environment`
- `mobile-app-ios`
- `webhook-listener`
- `data-sync-service`

## Các loại khóa API và quyền

### Khóa toàn quyền

```
Permissions: All API endpoints
Use cases: Complete application integration
Risk level: High - protect carefully
```

### Khóa chỉ đọc

```
Permissions: GET requests only
Use cases: Analytics, reporting, dashboards
Risk level: Low - limited access
```

### Khóa chỉ gửi

```
Permissions: Transactional email sending
Use cases: Application notifications, receipts
Risk level: Medium - can send emails
```

### Khóa quản lý liên hệ

```
Permissions: Contact CRUD operations
Use cases: CRM integrations, form submissions
Risk level: Medium - data modification
```

## Sử dụng khóa API

### Xác thực qua header

Đưa khóa API của bạn vào header `api-key`:

```http
GET /v3/account HTTP/1.1
Host: api.brevo.com
Accept: application/json
Content-Type: application/json
api-key: YOUR_API_KEY
```

### Ví dụ mã nguồn

#### JavaScript/Node.js

```javascript
const brevo = require('@getbrevo/brevo');

const apiInstance = new brevo.AccountApi();
apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);

// Make authenticated request
apiInstance.getAccount()
  .then(data => console.log('Account info:', data))
  .catch(error => console.error('Error:', error));
```

#### Python

```python
import sib_api_v3_sdk
from sib_api_v3_sdk.rest import ApiException

# Configure API key
configuration = sib_api_v3_sdk.Configuration()
configuration.api_key['api-key'] = 'YOUR_API_KEY'

# Create API instance
api_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

```php
<?php
require_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

```ruby
require 'sib-api-v3-sdk'

# Configure API key
SibApiV3Sdk.configure do |config|
  config.api_key['api-key'] = 'YOUR_API_KEY'
end

# Create API instance
api_instance = SibApiV3Sdk::AccountApi.new

begin
  # Get account info
  result = api_instance.get_account
  puts result
rescue SibApiV3Sdk::ApiError => e
  puts "Exception when calling AccountApi->get_account: #{e}"
end
```

## Bảo mật khóa API

### Lưu trữ an toàn

**Biến môi trường** (khuyến nghị)

```bash
# .env file
BREVO_API_KEY=xkeysib-your-api-key-here

# Usage in code
const 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

1. **Không bao giờ hardcode khóa**

   ```javascript
   // ❌ Bad - hardcoded
   const apiKey = "xkeysib-a1b2c3d4...";

   // ✅ Good - environment variable
   const apiKey = process.env.BREVO_API_KEY;
   ```

2. **Dùng khóa khác nhau cho từng môi trường**

   ```
   Production:  BREVO_API_KEY_PROD
   Staging:     BREVO_API_KEY_STAGING
   Development: BREVO_API_KEY_DEV
   ```

3. **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

4. **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-app
Created: 2024-01-15
Last Used: 2024-01-20 14:30 UTC
Requests Today: 1,247
Status: Active
```

### Quy trình xoay vòng khóa

1. **Tạo khóa mới**: Tạo khóa thay thế
2. **Cập nhật cấu hình**: Triển khai với khóa mới
3. **Theo dõi**: Đảm bảo khóa mới hoạt động đúng
4. **Thời gian ân hạn**: Giữ khóa cũ hoạt động trong 24 đến 48 giờ
5. **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ộ:

1. **Thu hồi ngay lập tức**: Xóa khóa khỏi bảng điều khiển
2. **Tạo khóa thay thế**: Tạo khóa mới ngay
3. **Cập nhật ứng dụng**: Triển khai với khóa mới càng sớm càng tốt
4. **Theo dõi hoạt động**: Kiểm tra xem có việc sử dụng trái phép không
5. **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

Brevo giới hạn yêu cầu theo từng endpoint, không theo ngày. Ở mức general, mà mọi gói đều có, `POST /v3/smtp/email` cho phép 1.000 yêu cầu mỗi giây, các endpoint `/v3/contacts` cho phép 10 mỗi giây và 36.000 mỗi giờ, và các endpoint không có giới hạn riêng cho phép 100 mỗi giờ. Các gói Professional và Enterprise mở khóa các mức cao hơn. Xem [Giới hạn tốc độ](https://tajo.io/vi/docs/rate-limits/) để biết bảng đầy đủ.

### Header giới hạn tần suất

```http
HTTP/1.1 200 OK
x-sib-ratelimit-limit: 1000
x-sib-ratelimit-remaining: 750
x-sib-ratelimit-reset: 1
```

### Xử lý giới hạn tần suất

```javascript
async function makeApiCall() {
  try {
    const response = await fetch(url, { headers });

    if (response.status === 429) {
      // Seconds until the window resets
      const waitTime = Number(response.headers.get('x-sib-ratelimit-reset') || 1);

      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)**

```json
{
  "code": "unauthorized",
  "message": "Invalid API key provided"
}
```

**Không đủ quyền (403)**

```json
{
  "code": "permission_denied",
  "message": "API key does not have required permissions"
}
```

**Vượt quá giới hạn tần suất (429)**

```json
{
  "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](https://tajo.io/vi/docs/authentication/oauth/)
- Tìm hiểu về token JWT
- [Khám phá giới hạn tần suất](https://tajo.io/vi/docs/rate-limits/)
- [Dùng thử các SDK](https://tajo.io/vi/docs/sdks-libraries/)
