DOCS

Xác thực OAuth 2.0

Xác thực các dịch vụ phía sau của bạn với Zonos bằng cách sử dụng mã hóa khóa bất đối xứng — không cần bí mật chia sẻ.

Zonos hỗ trợ xác thực máy chủ sang máy chủ thông qua OAuth 2.0 JWT Bearer Token Grant (RFC 7523). Dịch vụ của bạn ký một JWT có thời gian sống ngắn bằng khóa riêng RSA của bạn; Zonos xác minh nó bằng cách sử dụng khóa công khai đã đăng ký của bạn và trả về một token Bearer có phạm vi giới hạn trong tổ chức của bạn.

Tóm tắt luồng:

  1. Tạo một cặp khóa RSA và đăng ký khóa công khai của bạn với Zonos.
  2. Lúc chạy, ký một xác nhận JWT bằng khóa riêng của bạn và POST nó đến điểm cuối token.
  3. Zonos trả về một token truy cập có thời gian sống ngắn.
  4. Bao gồm token truy cập dưới dạng Authorization: Bearer <token> trên mỗi yêu cầu API.

Vòng đời token và bộ nhớ cache 

Token truy cập hết hạn trong 5 phút theo mặc định. Lưu trữ token trong bộ nhớ cache và làm mới một cách chủ động — không yêu cầu token mới trên mỗi lệnh gọi API. Mỗi lần làm mới yêu cầu một xác nhận JWT được ký lại.

1import time, requests
2 
3_cache = {"access_token": None, "expires_at": 0}
4 
5def get_access_token():
6 if time.time() < _cache["expires_at"] - 30:
7 return _cache["access_token"]
8 
9 assertion = build_jwt_assertion()
10 data = requests.post(
11 "https://auth.zonos.com/oauth/token",
12 json={
13 "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
14 "assertion": assertion,
15 },
16 ).json()
17 
18 _cache["access_token"] = data["access_token"]
19 _cache["expires_at"] = time.time() + data["expires_in"]
20 return _cache["access_token"]

Tham khảo lỗi 

Tất cả các lỗi tuân theo định dạng phản hồi lỗi OAuth 2.0 (RFC 6749 §5.2):

1{
2 "error": "invalid_grant",
3 "error_description": "JWT assertion has expired"
4}
Trạng thái HTTPerrorNguyên nhân
400unsupported_grant_typegrant_type không phải urn:ietf:params:oauth:grant-type:jwt-bearer
400invalid_requestTrường bị thiếu hoặc sai định dạng
401invalid_grantChữ ký không hợp lệ, xác nhận hết hạn, tổ chức không xác định hoặc khóa chưa đăng ký
500server_errorLỗi nội bộ — liên hệ hỗ trợ Zonos nếu lỗi vẫn tiếp diễn

Nguyên nhân phổ biến của invalid_grant:

  • exp nằm trong quá khứ — đảm bảo đồng hồ hệ thống của bạn được đồng bộ NTP
  • aud không chính xác "zonos-auth"
  • iss không khớp với ID Tổ chức đã đăng ký của bạn
  • Khóa công khai đã được xoay nhưng chưa được cập nhật với Zonos

Các thực hành bảo mật tốt nhất 

  • Bảo vệ khóa riêng của bạn. Lưu trữ nó trong trình quản lý bí mật chuyên dụng — không bao giờ trong kiểm soát nguồn, biến môi trường hoặc nhật ký.
  • Giữ xác nhận ngắn. 60–300 giây là tiêu chuẩn; không có lý do để phát hành những cái dài hơn.
  • Bao gồm jti. Một giá trị duy nhất cho mỗi xác nhận cho phép phát hiện phát lại phía máy chủ.
  • Xoay cặp khóa định kỳ. Đăng ký khóa công khai mới với Zonos trước khi thu hồi khóa cũ để tránh ngừng hoạt động.
  • Không bao giờ ghi nhật ký giá trị của access_token hoặc assertion. Coi cả hai là thông tin xác thực.

Trang này có hữu ích không?