رمز TOTP للمصادقة الثنائية
أداة تولّد رمز TOTP لمرة واحدة — الرمز المكوَّن من ستة أرقام الذي تعرضه تطبيقات المصادقة الثنائية مثل Google Authenticator — من مفتاح سرّي تُدخله، ويستخدمها المطورون لاختبار تكامل مصادقة ثنائية دون فتح تطبيق هاتف منفصل.
شغّل الأداة مجانًا
تعمل هذه الأداة داخل متصفحك — مجانًا، ولا تُرسل بياناتك إلى أي خادم
كيف يُحسَب رمز يتغيّر كل 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 '{"items":["valor-1","valor-2"]}'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({
"items": [
"valor-1",
"valor-2"
]
})
});
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={
"items": [
"valor-1",
"valor-2"
]
},
)
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" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
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)مثال على الطلب
{
"items": [
"valor-1",
"valor-2"
]
}مثال على الاستجابة
{
"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 | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |