رمز TOTP للمصادقة الثنائية
الرمز المكوّن من ستة أرقام الذي يعرضه تطبيق المصادقة كل 30 ثانية يُحسب من مفتاح سري مشترك والوقت الحالي: أدخل المفتاح لتحصل على الرمز الحالي والثواني المتبقية، أو تحقق من رمز أدخله أحدهم. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
أداة تولّد رمز TOTP لمرة واحدة — الرمز المكوَّن من ستة أرقام الذي تعرضه تطبيقات المصادقة الثنائية مثل Google Authenticator — من مفتاح سرّي تُدخله، ويستخدمها المطورون لاختبار تكامل مصادقة ثنائية دون فتح تطبيق هاتف منفصل.
كيف يُصنع الرمز المعتمد على الوقت
رمز TOTP حساب رياضي لا سحر: يُجمع مفتاح سري مشترك مع الوقت الحالي ويُحسب منهما معًا بدالة تجزئة ليخرج رمز من ستة أرقام. ويُقسَّم الوقت إلى خطوات مدة كل منها 30 ثانية، فيأتي مع كل خطوة جديدة رمز جديد. وقد اعتُمدت هذه الطريقة عام 2011 في RFC 6238، وهي مبنية على معيار HOTP الأقدم القائم على العدّاد في RFC 4226. فالعدّاد يفقد التزامن عندما يُولَّد رمز ولا يُستخدم، أما الوقت فيعيد التزامن تلقائيًا في كل فترة. ولهذا تعتمد تطبيقات المصادقة التي تمسح رمز QR كلها تقريبًا على TOTP لا على HOTP.
فيمَ يُستخدم وما الذي ينبغي الانتباه إليه
عند التوليد تحصل على الرمز الحالي وعدد الثواني المتبقية من صلاحيته. وعند التحقق تعرف هل يطابق الرمز المدخل، ومع أي خطوة زمنية تطابق، لأن فرقًا صغيرًا بين ساعة الهاتف والخادم أمر طبيعي. ومن استخداماته التحقق عند تسجيل الدخول بعد كلمة المرور، والتأكد من أن المستخدم مسح رمز QR الجديد بشكل صحيح، واستعادة الحساب خلال مكالمة مع الدعم، وتسجيل الدخول الآلي إلى حسابات الاختبار. ومن يعيد بناء هامش التسامح هذا بنفسه يخطئ بسهولة، فيُغلق الباب أمام مستخدمين حقيقيين أو يقبل رموزًا لا ينبغي قبولها. أما المفاتيح المكتوبة بصيغة خاطئة فتُرفض فورًا.
كيف يُحسَب رمز يتغيّر كل 30 ثانية
رمز TOTP ليس عشوائيًا بلا قاعدة؛ يُحسَب من مفتاح سرّي مشترك بين الخادم والتطبيق، ومن الوقت الحالي مقسَّمًا إلى فترات ثابتة غالبًا 30 ثانية. لهذا يعرض تطبيق المصادقة على هاتفك نفس الرمز الذي يتوقعه الخادم في اللحظة نفسها، دون أي اتصال بينهما أثناء توليد الرمز.
اختبار تكامل مصادقة ثنائية بدون هاتف
عند بناء ميزة تسجيل دخول بخطوتين في تطبيق جديد، يحتاج المطور توليد رموز صحيحة مرارًا أثناء الاختبار دون فتح هاتفه في كل مرة. تولّد الأداة الرمز الصحيح لحظيًا من المفتاح السرّي نفسه المستخدم في الإعداد، فيختبر منطق التحقق في النظام بسرعة أكبر.
لماذا يفشل رمز صحيح أحيانًا
السبب الأشيع لرفض رمز TOTP صحيح ظاهريًا هو فرق التوقيت بين ساعة الخادم وساعة الجهاز الذي ولّد الرمز؛ فارق بضع ثوانٍ فقط قد يكفي لإنتاج رمز مختلف عن المتوقع. تساعد الأداة في التحقق من أن مفتاحًا سرّيًا معينًا ينتج الرمز الصحيح في وقت محدد، فيعزل المطور المشكلة بين الخوارزمية وضبط الساعة.
حالات الاستخدام
اختبار ميزة مصادقة ثنائية جديدة
يبني مطور في شركة الخليج الرقمية ميزة تسجيل دخول بخطوتين، ويستخدم الأداة لتوليد رموز صحيحة أثناء الاختبار بدل فتح هاتفه في كل محاولة.
تشخيص فشل رمز في بيئة اختبار
يواجه فريق تقني رفضًا متكررًا لرموز TOTP صحيحة ظاهريًا في بيئة الاختبار، ويستخدم الأداة لعزل المشكلة بين خطأ في الخوارزمية أو فارق توقيت بين الخوادم.
التحقق من مفتاح قبل تسليمه لعميل
قبل تسليم مفتاح مصادقة ثنائية لعميل جديد، يتحقق فريق مؤسسة النخيل للمقاولات أن المفتاح ينتج رموزًا صحيحة عبر الأداة، لتفادي شكوى لاحقة بعد التسليم.
الأسئلة الشائعة
هل هذه الأداة بديل عن تطبيق مصادقة فعلي؟
لا، هي أداة اختبار وتشخيص للمطورين؛ للاستخدام الشخصي اليومي يبقى تطبيق مصادقة على الهاتف هو الخيار الصحيح.
لماذا يظهر رمز مختلف عن تطبيق هاتفي؟
غالبًا بسبب فارق توقيت بسيط بين جهازك وساعة النظام؛ تحقق من ضبط الساعة تلقائيًا في إعدادات جهازك.
هل يُحفَظ المفتاح السرّي الذي أدخله؟
لا، التوليد يجري داخل متصفحك فقط ولا يُرسَل المفتاح إلى أي خادم ولا يُحفَظ بعد إغلاق الصفحة.
ما مدة صلاحية الرمز المولَّد؟
30 ثانية عادة، ثم يتغيّر تلقائيًا لرمز جديد؛ هذا هو المعيار المتبع في معظم تطبيقات المصادقة الثنائية.
هل الاستخدام مجاني بلا حدّ؟
نعم، من المتصفح مباشرة مجاني تمامًا بلا حدّ لعدد الرموز التي تولّدها.
هل تعمل الأداة من الجوال؟
نعم، صفحة ويب عادية تعمل من متصفح الجوال بنفس الطريقة على الحاسوب.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/totp \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"secret":"JBSWY3DPEHPK3PXP"}'const res = await fetch("https://api.kit.forhosting.com/dev/totp", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"secret": "JBSWY3DPEHPK3PXP"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/totp",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"secret": "JBSWY3DPEHPK3PXP"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/totp", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"secret":"JBSWY3DPEHPK3PXP"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"secret":"JBSWY3DPEHPK3PXP"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/totp", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"secret": "JBSWY3DPEHPK3PXP"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.totp",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
من المتصفح فقط، دون تخزين المفتاح
توليد الرمز يجري داخل متصفحك؛ المفتاح السرّي الذي تدخله لا يُرسَل إلى أي خادم ولا يُحفَظ بعد إغلاق الصفحة، وهو أمر مهم لأن هذا المفتاح، إن سُرِّب، يسمح لأي طرف بتوليد رموز صحيحة نيابة عنك.