Tạo mã TOTP online
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).
Kết quả
Bấm “Chạy” để xem kết quả.
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ử.
Dùng trong code của bạn
curl "https://apibox.io.vn/v1/totp?issuer=APIBox&account=an@example.com" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/totp?issuer=APIBox&account=an@example.com', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/totp?issuer=APIBox&account=an@example.com",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/totp?issuer=APIBox&account=an@example.com');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Tài liệu API → Nhận API key miễn phí
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.