Skip to content

TOTP

سازندهٔ گذرواژهٔ یک‌بارمصرفِ زمان‌بنیاد، بر پایهٔ استاندارد RFC 6238. برای ساختن کدهای تأیید متغیر به کار می‌رود و در احراز هویت دومرحله‌ای (2FA) رایج است.

API

TOTP.generate

یک گذرواژهٔ یک‌بارمصرفِ زمان‌بنیاد می‌سازد.

بازگشت

آرگومانتوضیحنوع
Objectشیئی دربردارندهٔ OTP و زمان انقضا{ otp: string, expires: number }
otpرشتهٔ گذرواژهٔ یک‌بارمصرفِ ساخته‌شدهstring
expiresبرچسب زمانی (میلی‌ثانیه) که OTP در آن منقضی می‌شودnumber

پارامترها

پارامترتوضیحنوعپیش‌فرض
keyکلید محرمانه، همچون رشتهٔ کدشده با Base32stringالزامی
optionsپیکربندی اختیاریOptionsپایین‌تر را ببینید

گزینه‌ها

پارامترتوضیحنوعپیش‌فرض
digitsتعداد رقم‌های OTPnumber6
algorithmالگوریتم درهم‌سازی'SHA-1' | 'SHA-224' | 'SHA-256' | 'SHA-384' | 'SHA-512' | 'SHA3-224' | 'SHA3-256' | 'SHA3-384' | 'SHA3-512''SHA-1'
periodدرازای پنجرهٔ زمانی (ثانیه)number30
timestampبرچسب زمانی (میلی‌ثانیه) که OTP بر پایهٔ آن ساخته می‌شودnumberDate.now()

نمونه

کاربرد پایه

js
import { TOTP } from 'ranuts';

const secret = 'JBSWY3DPEHPK3PXP'; // کلید محرمانهٔ کدشده با Base32
const result = TOTP.generate(secret);

console.log(result.otp); // برای نمونه: '341128'
console.log(result.expires); // برای نمونه: 1465324730000 (برچسب زمانی)

تغییر تعداد رقم‌ها

js
import { TOTP } from 'ranuts';

const secret = 'JBSWY3DPEHPK3PXP';
const result = TOTP.generate(secret, { digits: 8 });

console.log(result.otp); // برای نمونه: '43341128' (۸ رقم)

تغییر پنجرهٔ زمانی

js
import { TOTP } from 'ranuts';

const secret = 'JBSWY3DPEHPK3PXP';
const result = TOTP.generate(secret, { period: 60 }); // پنجرهٔ ۶۰ ثانیه‌ای

console.log(result.otp);
console.log(result.expires);

به کار بردن الگوریتم درهم‌سازی دیگر

js
import { TOTP } from 'ranuts';

const secret = 'JBSWY3DPEHPK3PXP';
const result = TOTP.generate(secret, { algorithm: 'SHA-512' });

console.log(result.otp);

ساخت OTP با برچسب زمانی مشخص

js
import { TOTP } from 'ranuts';

const secret = 'JBSWY3DPEHPK3PXP';
const timestamp = 1465324707000; // برچسب زمانی ۲۰۱۶-۰۶-۰۸
const result = TOTP.generate(secret, { timestamp });

console.log(result.otp); // OTPِ ساخته‌شده بر پایهٔ برچسب زمانی داده‌شده

ترکیب چند گزینه

js
import { TOTP } from 'ranuts';

const secret = 'JBSWY3DPEHPK3PXP';
const result = TOTP.generate(secret, {
  digits: 8,
  algorithm: 'SHA-256',
  period: 60,
});

console.log(result.otp);
console.log(result.expires);

یادداشت‌ها

  1. قالب کلید: کلید باید رشته‌ای کدشده با Base32 باشد. اگر نویسه‌های نامعتبر داشته باشد، خطای 'Invalid base32 character in key' پرتاب می‌شود.

  2. هم‌زمانی ساعت‌ها: TOTP به هم‌زمان بودن ساعت‌ها تکیه دارد. مطمئن شوید ساعت کارخواه و سرور با هم می‌خوانند، وگرنه ممکن است تأیید شکست بخورد.

  3. زمان انقضا: expires برچسب زمانی پایان پنجرهٔ کنونی را می‌دهد. هنگام تأیید معمولاً به اندازهٔ یک پنجره اغماض می‌گذارند (مثلاً ±۱ دوره).

  4. امنیت: کلیدها را باید امن نگه داشت و در کد ننوشت. توصیه می‌شود از متغیرهای محیطی یا سامانه‌ای امن برای مدیریت کلید استفاده کنید.

منتشرشده تحت مجوز MIT.