Skip to content

Kiểm thử ​

Hai cách để tạo mã SmartOTP mà không cần SDK: một ứng dụng authenticator tiêu chuẩn cho OTP cơ bản, và một script Python bao phủ cả mã cơ bản lẫn nâng cao.

OTP cơ bản với Google Authenticator ​

Đăng ký một Soft OTP mới và ghi lại key từ response của Kích hoạt:

json
{
  "success": true,
  "code": 1,
  "message": "success",
  "data": {
    "key": "fake_client_secret_key",
    "period": 15,
    "algorithm": "HmacSHA512",
    "length": 6,
    "type": "totp",
    "issuer": "SOTP"
  }
}

Tạo mã QR ngay trên máy — ví dụ pyotp.TOTP(...).provisioning_uri() chuyển cho qrencode — với các giá trị sau:

TrườngKiểuMô tả
TypeTOTPDựa trên thời gian (time-based).
Secretfake_client_secret_keykey từ response, đã bỏ ký tự = ở cuối.
LabelCake-Soft-OTPNhãn hiển thị.
IssuerCakeIssuer hiển thị.
AlgorithmSHA-512Phải khớp với HmacSHA512.
Length6 digitsĐộ dài mã.
Period15Số giây mỗi mã.

Ký tự = ở cuối là phần đệm (padding) Base32. Các ứng dụng authenticator sẽ từ chối secret trừ khi bạn loại bỏ nó.

WARNING

Cách này đưa một client secret đang hoạt động vào một ứng dụng authenticator dành cho người tiêu dùng. Chỉ dùng nó với thông tin xác thực test trên một tenant không phải production — không bao giờ dùng với secret thật của khách hàng.

Cả hai loại OTP với Python ​

bash
pip install pyotp
# or
pip3 install pyotp

Thay client_secret bằng key từ Kích hoạt, và challenge bằng challenge_key từ Tạo giao dịch:

python
import pyotp
import hashlib
import base64

client_secret = "fake_client_secret_key"
challenge = "fake_challenge_key"

def gen_opt(secret) -> str:
    totp = pyotp.TOTP(secret, 6, hashlib.sha512, "CAKE", "CAKE", 15)
    return totp.now()

def gen_secret_from_challenge(secret, challenge) -> str:
    src = secret + "-" + challenge
    m = hashlib.sha512()
    m.update(bytes(src, 'utf-8'))
    return base64.b32encode(m.digest())

otp = gen_opt(client_secret)
print("Basic OTP: ", otp)

secret = gen_secret_from_challenge(client_secret, challenge)
advance_otp = gen_opt(secret)
print("Advance OTP: ", advance_otp)
bash
python otp.py
# or
python3 otp.py
text
Basic OTP:  123456
Advance OTP:  654321

Secret dùng cho OTP nâng cao được suy ra bằng cách nối khóa bí mật của client và khóa challenge bằng dấu -, băm bằng SHA-512, rồi mã hóa Base32 digest thu được. Giá trị suy ra đó sau đó được dùng như một secret TOTP thông thường.

Bước tiếp theo ​

Developers