فك ترميز حمولة JWT من دون التحقق من التوقيع
تفصل أداة فك ترميز JWT هذه JSON Web Token إلى مقاطعه المدمجة الثلاثة، ثم تقرأ JSON المرمّز بصيغة base64url في الترويسة والحمولة.
شغّل الأداة مجانًا
وتعيد القسمين في صورة كائنين منظّمين، مما يسهّل عليكم فحص المطالبات والمعرّفات والطوابع الزمنية والجهات المصدرة والجماهير وبيانات الخوارزمية أو تمريرها إلى أداة أخرى. لا يجري التحقق من التوقيع عمدًا؛ لذلك تصف القيم المفكوكة ما يدّعيه الرمز ولا تثبت مَن أنشأه. استخدموا النتيجة للتنقيح والتطوير والتوثيق والفحص الحذر، ولا تستخدموها دليلًا على أصالة الرمز أو صلاحيته.
افهموا ما يثبته فك الترميز وما لا يثبته
يتكون JWT عادةً من ترويسة وحمولة وتوقيع تفصل بينها نقاط. المقطعان الأولان هما JSON مرمّز بصيغة base64url، أي إن المحتوى مهيأ للنقل المدمج لكنه ليس مشفرًا ولا مخفيًا. تفصل هذه الإمكانية الرمز المرسل، وتفك المقطعين الأولين باعتبارهما UTF-8، وتحلل JSON، ثم تعيد كائني الترويسة والحمولة. ولا تستخدم المقطع الثالث للمصادقة على أي شيء. هذا الفرق مهم لأن أي شخص يستطيع إنشاء سلسلة تشبه الرمز وتحمل مطالبات اعتباطية. فظهور موضوع أو دور أو جهة مصدرة أو جمهور أو وقت انتهاء في الحمولة المفكوكة لا يثبت أن نظامًا موثوقًا أصدر الرمز. استخدموا فك الترميز عندما تحتاجون إلى رؤية بنية الرمز، أو تشخيص أسماء المطالبات وقيمها، أو الحصول على تمثيل مقروء أثناء التطوير. وعندما يعتمد قرار أمني على الرمز، استخدموا مكتبة مناسبة للتحقق من JWT مع مفتاح موثوق محدد صراحةً، وخوارزمية مسموح بها، وجهة مصدرة وجمهور محددين.
أرسلوا JWT مدمجًا واقرؤوا الاستجابة
الصقوا JWT المدمج كاملًا أو أرسلوه في حقل token. يتضمن الرمز الصحيح بنيويًا ثلاثة مقاطع بالضبط تفصل بينها نقطتان، مع أن أداة الفك تقرأ المقطعين الأولين فقط. تحتوي الاستجابة على كائن header وكائن payload. من حقول الترويسة الشائعة typ الذي يحدد غالبًا نوع وسائط JWT، وalg الذي يذكر خوارزمية التوقيع المزعومة. ومن حقول الحمولة الشائعة sub للموضوع، وiss للجهة المصدرة، وaud للجمهور، وexp للانتهاء، إضافة إلى مطالبات خاصة بالتطبيق. لا تشترط الأداة مطالبة بعينها، بل تحافظ على قيم JSON الموجودة. وتبقى مطالبات NumericDate مثل exp وnbf وiat أرقامًا بدل تحويلها إلى تواريخ، فلا تفترض الأداة طريقة عرضها أو مقارنتها. إذا كان عدد المقاطع غير صحيح، أو كان base64url أو UTF-8 أو JSON غير صالح، أو لم يكن القسم المفكوك كائنًا، فسيعيد الطلب خطأ إدخال غير صالح بدلًا من نتيجة جزئية.
استخدموا المطالبات المفكوكة بأمان أثناء التطوير
يفيد فك الترميز خصوصًا عند الحدود بين الأنظمة. يستطيع مطور API مقارنة المطالبات التي ينتجها موفر الهوية بالأسماء التي يتوقعها التطبيق. ويستطيع فريق الدعم فحص رمز اختبار منقح لمعرفة ما إذا كان الجمهور أو النطاق مفقودًا. ويمكن لحزمة الاختبارات فك رموز أنشأتها fixture محلية والتأكد من وجود المطالبات المخصصة المطلوبة قبل اختبار التحقق التشفيري على نحو مستقل. اجعلوا الحد الأمني واضحًا في كل سير عمل: البيانات المفكوكة مدخلات غير موثوقة. لا تمنحوا وصولًا، ولا تختاروا tenant، ولا تقبلوا هوية، ولا تكشفوا بيانات خاصة لمجرد أن مطالبة مفكوكة تطلب ذلك. تجنبوا لصق bearer tokens حقيقية في السجلات أو التذاكر أو المحادثات أو المستندات المشتركة، فقد يكون JWT اعتمادًا ساريًا حتى إن بدت حمولته غير مؤذية. فضّلوا أمثلة مصطنعة أو منتهية أو مولدة محليًا عند التشخيص. وإذا كان لا بد للأتمتة من معالجة رموز حقيقية، فأرسلوها عبر قناة محمية جيدًا فقط، ثم أتبعوا فك الترميز بتحقق يعتمد على إعدادات موثوقة.
حالات الاستخدام
تنقيح مطالبات موفر الهوية
افحصوا شكل الترويسة والحمولة لمقارنة أسماء المطالبات والجماهير والنطاقات والمعرّفات الصادرة بإعدادات التطبيق.
فحص رموز الاختبار المحلية
فكّوا رموز fixture في الاختبارات أو نصوص التطوير وتأكدوا من المطالبات المخصصة المتوقعة قبل التحقق من التوقيع بصورة مستقلة.
شرح بنية الرمز
حوّلوا JWT مدمجًا إلى كائنات JSON مقروءة للتوثيق التقني أو التدريب أو التشخيص باستخدام أمثلة مصطنعة ومنقحة بعناية.
الأسئلة الشائعة
هل تتحقق هذه الأداة من توقيع JWT؟
لا. إنها تفك الترويسة والحمولة فقط. عاملوا كل حقل بوصفه غير موثوق حتى يتحقق مدقق مستقل من التوقيع والمطالبات المطلوبة.
ما التكلفة؟
سعر API هو $0.002 لكل طلب. ويمكن لنسخة المتصفح تشغيل منطق فك الترميز الحتمي نفسه محليًا.
لماذا يجب أن يتضمن الرمز ثلاثة مقاطع؟
تتكون صيغة JWT المدمجة من ترويسة وحمولة وتوقيع تفصل بينها نقاط. ترفض هذه الإمكانية أي سلسلة لا تطابق هذه البنية بالضبط.
هل تتحول طوابع الانتهاء إلى تواريخ؟
لا. تعاد قيم مثل exp وnbf وiat كما وردت في الحمولة تمامًا، لتفسروها وفق متطلباتكم.
هل يمكن فك JWT غير موقّع؟
تظل الصيغة المدمجة بحاجة إلى ثلاثة مقاطع، ويمكن أن يكون الثالث فارغًا في الرمز غير المحمي. تفك الترويسة والحمولة من دون استنتاج أمني.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/web/jwt-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}'const res = await fetch("https://api.kit.forhosting.com/web/jwt-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/jwt-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/jwt-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/jwt-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.jwt_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
timeout_sec | 30 |
max_crawl_pages | 25 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |