Mã TOTP / 2FA API

Thêm xác thực hai lớp: tạo secret TOTP kèm mã QR otpauth:// cho Google Authenticator, tính và kiểm tra mã 6–8 số (RFC 6238 / HOTP).

GETPOSThttps://apibox.io.vn/v1/totp
Bảo mật & Mã hoá▶ Dùng thử online

API TOTP giúp ứng dụng của bạn có xác thực hai lớp mà không cần thư viện. action=generate tạo secret Base32 ngẫu nhiên và URI otpauth:// với issuer của bạn và account của người dùng; action=qr trả về cùng nội dung dưới dạng mã QR PNG hoặc SVG để quét bằng Google Authenticator, Microsoft Authenticator, Authy hay 1Password. action=verify với secret và code kiểm tra mã người dùng nhập, mặc định chấp nhận lệch đồng hồ một chu kỳ (window).

action=code trả về mã hiện tại, mã kế tiếp và số giây mã hiện tại còn hiệu lực. Hỗ trợ SHA-1 (mặc định, mọi app đều dùng được), SHA-256 và SHA-512, 6 hoặc 8 chữ số, chu kỳ khác 30 giây và HOTP theo bộ đếm (RFC 4226) với type=hotp; mã sinh ra khớp với các vector kiểm thử của RFC.

Không có gì được lưu: secret đi kèm từng request và phản hồi không được cache. Hãy lưu secret đã mã hoá trong cơ sở dữ liệu của bạn, chống dùng lại mã bằng cách nhớ time_step được chấp nhận gần nhất của mỗi người dùng và giới hạn số lần thử.

Tham số

TênVị tríKiểuBắt buộcMặc định
actionbody|querystringkhônggenerategenerate, qr, code hoặc verify (tự đoán theo tham số khác).
secretbody|querystringkhôngSecret Base32 (cho code / verify; tuỳ chọn khi generate).
codebody|querystringkhôngMã cần kiểm tra.
issuerbody|querystringkhôngTên ứng dụng hiển thị trong app xác thực.
accountbody|querystringkhôngNhãn người dùng, ví dụ email.
digitsbody|querynumberkhông66–8 chữ số.
periodbody|querynumberkhông30Chu kỳ (giây).
algorithmbody|querystringkhôngSHA1SHA1, SHA256 hoặc SHA512.
windowbody|querynumberkhông1Số chu kỳ lệch được chấp nhận (verify).
typebody|querystringkhôngtotptotp hoặc hotp (dùng counter).

Ví dụ

curl "https://apibox.io.vn/v1/totp?issuer=APIBox&account=an@example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"

Kết quả trả về

{
  "type": "totp",
  "secret": "OW7IHR3GMA57QTCFYF2WJ42XSPPCCUM7",
  "otpauth_uri": "otpauth://totp/APIBox%3Aan%40example.com?secret=OW7IHR3GMA57QTCFYF2WJ42XSPPCCUM7&issuer=APIBox&algorithm=SHA1&digits=6&period=30",
  "algorithm": "SHA1",
  "digits": 6,
  "period": 30,
  "current_code": "978344",
  "note": "Store the secret encrypted on your server; show the QR code (action=qr) once to the user."
}

Ứng dụng

  • Thêm 2FA cho trang đăng nhập SaaS trong một buổi chiều
  • Trang quản trị, công cụ nội bộ cần lớp xác thực thứ hai
  • Kiểm thử luồng authenticator khi QA
  • Sinh mã cho tài khoản dịch vụ trong script

Hỏi đáp

Có tương thích Google Authenticator không?

Có, với cấu hình mặc định (SHA-1, 6 số, 30 giây). Một số app bỏ qua thuật toán hoặc chu kỳ khác.

Secret có bị lưu lại không?

Không. Secret chỉ dùng để tính kết quả và phản hồi có Cache-Control: no-store. Bạn tự lưu secret, đã mã hoá.

Làm sao chặn dùng lại một mã?

verify trả về time_step; lưu giá trị được chấp nhận gần nhất của mỗi người dùng và từ chối mã có time_step bằng hoặc cũ hơn.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →