Command Palette

Search for a command to run...

أدوات تصحيح أخطاء واجهة برمجة التطبيقات: علامات التبويب الستة التي أفتحها عندما تكمن نقطة النهاية في وجهي

أدوات تصحيح أخطاء واجهة برمجة التطبيقات: علامات التبويب الستة التي أفتحها عندما تكمن نقطة النهاية في وجهي

T
Toolz Team
|Jul 5, 2026|24 دقيقة قراءة

بدأت نقطة نهاية تنشيط الترخيص في أحد مشاريع Laravel الخاصة بي في رفض كل رمز مميز تم تسليمه إليه. ليس بعض الرموز المميزة. كل رمز مميز، بما في ذلك الرمز الذي أصدره نفس الخادم قبل تسعين ثانية. قالت السجلات token expired. لم تنته الرموز. قضيت معظم يوم السبت مقتنعًا بأن الساعة الموجودة على الصندوق قد انجرفت.

كان &#39؛ر. كان الخطأ سطرًا واحدًا:

if (payload.exp < Date.now()) throw new Error('token expired')

exp في JWT هو ثواني منذ العصر - RFC 7519 §4.1.4 لا لبس فيه حول ذلك. Date.now() في إرجاع جافا سكريبت مللي ثانية. لذلك كنت أقارن رقمًا مكونًا من عشرة أرقام برقم مكون من ثلاثة عشر رقمًا، والأرقام المكونة من عشرة أرقام تكون دائمًا أصغر. انتهت صلاحية كل رمز مميز في الكون إلى الأبد. كان الإصلاح Date.now() / 1000. استغرق التشخيص ثماني ساعات لأنني لم أفعل ذلك في الواقع بدا على الرمز المميز - واصلت إعادة قراءة الرمز الخاص بي، وهو ما يعادل تصحيح الأخطاء للبحث عن نظارتك أثناء ارتدائها.

ما كسر الحلقة أخيرًا هو لصق الرمز المميز في وحدة فك التشفير والقراءة exp: 1748952000تحويل ذلك إلى تاريخ، ورؤية الطابع الزمني لمدة أسبوعين في المستقبل. الرمز كان على ما يرام. كانت مقارنتي خاطئة. ثلاثون ثانية من النظر إلى البيانات تجاوزت ثماني ساعات من النظر إلى التعليمات البرمجية.

هذا &#39؛ ما يدور حوله هذا الدليل. ليست فلسفة تصحيح الأخطاء الذكية - أدوات المتصفح المحددة والمملة وغير الساحرة التي أحتفظ بها في مجموعة علامات تبويب تسمى &quot؛ تصحيح أخطاء API، &quot؛ الغرض الفعلي من كل واحد منهم، وأوضاع الفشل التي يلتقطونها. كل شيء هنا يعمل من جانب العميل تولز.ديف، وهو أمر مهم أكثر مما يبدو أنه يهم عندما يكون الشيء الذي أنت & #39؛ الذي على وشك لصقه هو رمز حامل الإنتاج.

ليرة تركية؛DR: عندما تسيء واجهة برمجة التطبيقات التصرف، توقف عن قراءة التعليمات البرمجية الخاصة بك وابدأ في قراءة الحمولة. تنسيق الاستجابة مع تنسيق JSON. كسر الرمز المميز مع JWT فك التشفيرليست أداة Base64 عامة. دور exp، iat، و X-RateLimit-Reset في مواعيد حقيقية مع محول الطابع الزمني. قارن استجابة العمل مع الاستجابة المكسورة مع فرق النص أو الأفضل من ذلك فرق JSON. فك تشفير سلسلة الاستعلام التي تتشوه مع تشفير URL. كل ذلك يعمل في متصفحك - الرمز المميز لا يتجاوز السلك أبدًا.


لماذا يبدو تصحيح أخطاء واجهة برمجة التطبيقات أسوأ بكثير من تصحيح أخطاء التعليمات البرمجية؟

لأنك تستطيع &#39؛ خطوة من خلاله. يحتوي الخطأ المحلي على تتبع مكدس ومصحح أخطاء ونقطة توقف. يحتوي خطأ API على سلسلة. قام خادم Somebody else&#39؛s بإنتاج تلك السلسلة، وفقًا للقواعد التي لا تعرفها إلا نصفها، ومهمتك هي العمل بشكل عكسي منها.

وهذا يعكس المهارة المعتادة. عنق الزجاجة هو &#39؛t المنطق، &#39؛s الوضوح. تقريبًا كل خطأ في واجهة برمجة التطبيقات I&#39؛ لقد تمت مطاردتها في السنوات القليلة الماضية وكانت غير مرئية حتى جعلت البيانات قابلة للقراءة

  • استجابة JSON مصغرة مكونة من 4000 حرف والتي تبين أنها تحتوي على "data": null دفن في العمق السادس.
  • كانت حمولة Base64 التي تم فك تشفيرها إلى رسالة خطأ في واجهة برمجة التطبيقات مهذبة للغاية بحيث لا يمكن وضعها في رمز الحالة.
  • خطاف ويب فشل في التحقق من التوقيع لأن النص يحتوي على سطر جديد لاحق كان عميل HTTP الخاص بي يضيفه بشكل مفيد.
  • طابع زمني كان بالمللي ثانية عندما قالت المستندات الثواني. (مرتين. شركات مختلفة.)

لم تكن أي من هذه مشاكل صعبة. كلهم كانوا غير مقروء مشاكل. الأدوات أدناه موجودة لجعل البيانات مقروءة بسرعة كافية بحيث تلاحظ الشيء الذي قد تنزلق عيناك إليه.

أي أداة لأي أعراض؟

هذه هي الطاولة التي أتمنى لو أن أحداً قد سلمني إياها منذ خمس سنوات. الأعراض على اليسار، التحرك أولا على اليمين.

الأعراض ماذا &#39؛s عادة ما يكون صحيحا الخطوة الأولى
الاستجابة عبارة عن خط عملاق واحد، can&#39؛t انظر الهيكل لا شيء&#39؛s مكسورة، &#39؛s تم تصغيرها للتو تنسيق JSON
401/403 على رمز قمت بسكه للتو خطأ الساعة أو المطالبة أو المقارنة JWT فك التشفير → تحقق exp، aud، iss
يظهر التاريخ كـ 1970 أو سنة 56122 عدم تطابق الثواني/الميلي ثانية محول الطابع الزمني
&quot؛ لقد نجح بالأمس وquot؛ مجال واحد تغير شكله فرق JSON الاستجابة القديمة مقابل الجديدة
يصل البارام مشوهًا أو مقطوعًا ترميز مزدوج، أو لا مفر منه &/+ تشفير URL
توقيع Webhook لا يتطابق أبدًا تختلف بايتات الجسم عما أنت &#39؛إعادة التجزئة مولد هاش على الجسم الخام بالضبط
Authorization: Basic ... مرفوض تم ترميز بيانات الاعتماد بشكل خاطئ، أو في مساحة ضالة محول BASE64
فشل النشر المستند إلى التكوين، ولم يتم تشغيل واجهة برمجة التطبيقات مطلقًا المسافة البادئة YAML مدقق يمل
تبدو إجابتان متطابقتين ولكنهما تتصرفان بشكل مختلف شخصية غير مرئية فرق النص

كل شيء أدناه هو النسخة الطويلة من هذا الجدول.


كيف أجعل استجابة API قابلة للقراءة خلال عشر ثوانٍ؟

لصقها في تنسيق JSON. هذا &#39؛s التقنية بأكملها، وI&#39؛m لا تكون عفوية - عادة تصحيح الأخطاء الوحيدة ذات الرافعة المالية الأعلى التي أتبعها هي رفض ذلك سبب حول حمولة لدي &#39؛t منسقة.

هنا&#39؛s شكل الاستجابة الذي أحصل عليه من مزود الفواتير، تمامًا كما يخرج من السلك

{"subscriptions":[{"id":"sub_7f3d8a2b","status":"active","plan":{"id":"pro_annual","interval":"year","amount":9900},"current_period_end":1748952000,"cancel_at_period_end":false}],"has_more":false}

منسق، it&#39؛s كائن مختلف تمامًا - ليس للمحلل اللغوي، ولكن بالنسبة لي

{
  "subscriptions": [
    {
      "id": "sub_7f3d8a2b",
      "status": "active",
      "plan": {
        "id": "pro_annual",
        "interval": "year",
        "amount": 9900
      },
      "current_period_end": 1748952000,
      "cancel_at_period_end": false
    }
  ],
  "has_more": false
}

الآن أستطيع أن أرى ذلك amount يكون 9900 و لا 99.00- it&#39؛s بالسنت، وهو خطأ التكامل الأكثر شيوعًا في المدفوعات - وذلك current_period_end هو عدد صحيح مكون من عشرة أرقام، وهو ما يعني الثواني، وهو ما يعني don&#39؛ لتسليمها إلى new Date() مباشرة.

التحقق من الصحة يلتقط ما فازت به عيناك &#39؛t

يتم التحقق من صحة التنسيق أيضًا. فشل التحليل هو المعلومات. الأخطاء التي تظهر فعليًا في الحمولات الحقيقية:

  • الفواصل الزائدة. قانوني في جافا سكريبت، غير قانوني في JSON (لكل RFC 8259). التركيبات المحررة يدويًا مليئة بها.
  • اقتباسات مفردة. يتطلب JSON علامات اقتباس مزدوجة. بايثون &#39؛س str(dict) الإخراج ليس JSON، بغض النظر عن مدى ظهوره.
  • مفاتيح غير مقتبسة. نفس القصة - that&#39؛s كائن جافا سكريبت حرفيًا، وليس JSON.
  • NaN / Infinity. بعض المتسلسلة تنبعث منها. JSON ليس لديه مثل هذه القيم الحرفية.
  • بوم. علامة ترتيب بايت UTF-8 أمام { سيجعل المحلل اللغوي الصارم يرفض مستندًا يبدو مثاليًا على الشاشة.

إذا كان JSON الخاص بك صالحًا ولكن شكل خطأ، هذه &#39؛s أداة مختلفة - راجع قسم الفرق أدناه.

لماذا تستخدم وحدة فك ترميز JWT بدلاً من فك تشفير الرمز المميز Base64 فقط؟

يمكنك فك تشفير Base64 لـ JWT يدويًا. لقد فعلت ذلك لسنوات. إنها &#39؛ عادة سيئة، وهنا #39؛ لماذا.

Jwt (RFC 7519) عبارة عن ثلاث قطع مفصولة بنقاط: الرأس والحمولة والتوقيع. كل قطعة هي base64urlليس Base64 القياسي - RFC 4648 §5، الأبجدية الآمنة لعنوان URL التي يتم تبديلها +- و /_ وعادة ما يسقط = الحشو. قم بتغذية ذلك إلى وحدة فك ترميز قياسية صارمة-Base64 وسوف يخطئ أو يعطيك بايتات غير مرغوب فيها بصمت. لذا فإن الطريقة اليدوية تعني التقسيم على النقاط، وإعادة الحشو، وتبديل الحروف الأبجدية، في كل مرة، ثم النظر إلى JSON الخام.

ال JWT فك التشفير يفعل كل ذلك في عجينة واحدة و- الجزء الذي يوفر الوقت بالفعل - يقدم المطالبات كمطالبات. تلك التي أتحقق منها بالترتيب:

  • exp (الزفير) و iat (صدر في) - كلاهما تاريخ رقميأي ثواني منذ 01/01/1970 بالتوقيت العالمي المنسق. هذا هو الحقل الذي أكل يوم السبت الخاص بي.
  • aud (الجمهور) - سيكون الرمز المميز الذي تم سكه لواجهة برمجة التطبيقات الخاصة بك مثاليًا من الناحية الهيكلية وسيظل مرفوضًا بواسطة المنتج.
  • iss (المصدر) - بعد ترحيل مزود الهوية، هذا هو المجال الذي تغير بهدوء.
  • alg في الرأس - إذا كان يقول noneلديك مشكلة أمنية وليست مشكلة تصحيح الأخطاء.

خذ المثال الأساسي المميز للجميع &#39؛s شوهد:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

رأس: {"alg":"HS256","typ":"JWT"}. الحمولة: {"sub":"1234567890","name":"John Doe","iat":1516239022}. و iat هناك 2018-01-18T01:30:22Z- وهو ما لا تعرفه إلا من خلال تشغيله من خلال محول الطابع الزمني، وهو الهدف الأساسي للقسم التالي.

الشيء الذي لا يفعله جهاز فك التشفير

فك التشفير لا يتحقق. يمكن لأي شخص فك تشفير JWT؛ الحمولة مشفرة وليست مشفرة. يخبرك جهاز فك التشفير بالرمز المميز المطالبات، أبدا ما إذا كان الادعاء صحيحا. يحدث التحقق من التوقيع على الخادم الخاص بك مع سرك، ولا ينبغي أبدًا تسليم أي أداة متصفح هذا السر. تعامل مع JWT الذي تم فك تشفيره بالطريقة التي تتعامل بها مع #39؛d تعامل مع إرسال النموذج: كتأكيد من شخص غريب.

كيف أتوقف عن فهم الطوابع الزمنية بشكل خاطئ؟

تعلم قراءة عدد الأرقام. هذه هي أرخص مهارة لتصحيح الأخطاء في الحقل بأكمله ويستغرق تعلمها دقيقة واحدة.

أرقام وحدة مثال new Date(x) في شبيبة يعطيك
10 ثواني 1748952000 21/01/1970 - من الواضح أنه خطأ
13 مللي ثانية 1748952000000 التاريخ الصحيح
16 ميكروثانية 1748952000000000 هراء

عشرة أرقام تعني ثواني. ثلاثة عشر يعني مللي ثانية. جافا سكريبت &#39؛s Date المنشئ يريد ميلي ثانية؛ يونكس، بايثون #39؛س time.time()، اذهب &#39؛s Unix()، PHP&#39؛s time()ومعظم واجهات برمجة التطبيقات &#39؛ exp الحقول تتحدث ثواني. كل شيء في اتجاه مجرى عدم التطابق هذا هو الفوضى.

والفوضى عالية في اتجاه وصامتة في الاتجاه الآخر. يغذي ثواني إلى محلل بالمللي ثانية وستحصل على 1970 - خطأ واضح جدًا لدرجة أنك تصلحه في دقيقة واحدة. يغذي مللي ثانية إلى أ ثواني المحلل اللغوي وتحصل على السنة 56122. لقد تحققت: 1708876200000، التي تم تفسيرها على أنها ثوانٍ، تهبط في 17 فبراير من عام 56122. هذا & #39؛ هو الاتجاه الذي يتم شحنه بهدوء، لأنه لا يوجد شيء يرمي - الاشتراك ببساطة لا ينتهي أبدًا ولا يلاحظ أحد لمدة ربع.

ال محول الطابع الزمني موجود حتى تتمكن من تسوية هذا الأمر في عجينة واحدة بدلاً من الجدال حوله. لصق 1748952000، اقرأ التاريخ، تابع. لصق X-RateLimit-Reset رأسية تشكو واجهة برمجة التطبيقات الخاصة بك وتكتشف أن لديك أربع دقائق للانتظار، وليس أربع ساعات. إذا كان الطابع الزمني ساذجًا (لا Z، لا يوجد تعويض) وتحتاج إلى التفكير فيما يعنيه ذلك في منطقة أخرى، وهي محول المنطقة الزمنية هي المتابعة.

فخان آخران للطابع الزمني يستحقان المعرفة

مشكلة 2038 حقيقية ومؤرخة. يفيض عداد 32 بت الموقع عند 2147483647الذي هو 2038-01-19T03:14:07Z. أي نظام لا يزال يخزن الوقت في int 32 بت موقّع - ويوجد عدد أكبر منها في أعمدة قاعدة البيانات المضمنة والقديمة أكثر مما يريد أي شخص الاعتراف به - ينكسر بعد ذلك. إذا كنت &#39؛ قم بتعيين فترات انتهاء صلاحية طويلة الأمد اليوم، فأنت قادر بالفعل على الوصول إلى هذا.

الطوابع الزمنية الساذجة هي كذبة عن طريق الإغفال. 2026-02-25T14:30:00 مع عدم وجود زائدة Z و لا +05:30 ليست لحظة من الزمن؛ it&#39؛s لحظة في مكان غير محدد. أتعامل مع أي واجهة برمجة تطبيقات تُرجع طوابع زمنية ساذجة كتقرير خطأ في انتظار تقديمه. تفضل RFC 3339 (2026-02-25T14:30:00Z)، وهو الملف التعريفي الصارم الذي لا لبس فيه لمعيار ISO 8601 الذي يستخدمه الويب بالفعل.

ماذا أفعل متى &quot؛ لقد نجح بالأمس &quot؛؟

فرقه. Don&#39؛t التنظير - فرقه.

التقط الاستجابة من بيئة العمل (أو احفر آخر جيدة من سجلاتك) والاستجابة من المكسورة، وضعها جنبًا إلى جنب. تسع مرات من أصل عشرة هناك فرق واحد بالضبط وهو &#39؛ يحدق بك في غضون خمس ثوان.

بالنسبة لـ JSON، الوصول إلى فرق JSON قبل أن يختلف النص. يقوم بتحليل كلا الجانبين والمقارنة هيكل، وهو ما يعني المفاتيح المعاد ترتيبها والمسافات البادئة المختلفة don&#39؛ تظهر كتغييرات - فقط التغييرات الحقيقية تظهر. فرق نصي بين مستندين JSON حيث سيضيء الخادم المتسلسل بترتيب مفاتيح مختلف مثل شجرة عيد الميلاد ولن يخبرك بأي شيء.

لكل ما هو &#39؛t JSON - الرؤوس والأجسام الأولية وملفات التكوين curl الإخراج - استخدم فرق النص. تخصصه هو فئة التغيير الذي لا تستطيع عيناك جسديًا التقاطه: مسافة زائدة، علامة تبويب أصبحت أربع مسافات، نهاية سطر CRLF تتسلل من جهاز يعمل بنظام Windows، اقتباس مجعد استبدله موقع التوثيق بـ واحد مستقيم عند نسخ المثال. أنا &#39؛ لقد كتبت قطعة كاملة على لماذا تفشل مقارنات النصوص المقلوبةلأنه كلفني تصعيد الدعم مرة واحدة.

لماذا تستمر معلمات الاستعلام الخاصة بي في الوصول مكسورة؟

نظرًا لأن ترميز URL له ثلاث أو أربع نكهات مختلفة بمهارة، فإن مكدس الجميع &#39؛s يختار نكهة مختلفة.

الكلاسيكيات، بترتيب تقريبي لعدد المرات &#39؛ لقد عضتني:

  • + مقابل %20. في سلسلة الاستعلام، + تاريخيا يعني الفضاء ( application/x-www-form-urlencoded اتفاقية). في مقطع المسار، + يعني زائد حرفي. لذلك يحتوي التوقيع الأساسي 64 على +، تم إسقاطه في سلسلة استعلام غير مشفرة، ويصل به مسافات ويفشل التحقق من التوقيع. هذا أمر سيء حقًا لأن القيمة يبدو الحق في السجلات.
  • ترميز مزدوج. %2F يصبح %252F لأن طبقتين من المكدس الخاص بك كلاهما قاما بتشفيرها بشكل مفيد. العرض عبارة عن معلمة تكتسب علامات النسبة المئوية في كل مرة تمر فيها عبر وكيل.
  • خام & داخل القيمة. يقسم المعلمة الخاصة بك إلى قسمين. الآن name=Ben & Jerry يكون name=Ben بالإضافة إلى معلمة غامضة تسمى Jerry.

لصق عنوان URL في تشفير URL وفك تشفيرها. إذا كان فك تشفيره لا يزال يترك نسبة هروب خلفك، فأنت &#39؛ لقد وجدت التشفير المزدوج الخاص بك. هذا & #39؛ التشخيص بأكمله.

كيف يمكنني تصحيح أخطاء خطاف الويب الذي فاز &#39؛t التحقق؟

هذا هو الذي يفصل بين &quot؛ أنا أفهم HTTP&quot؛ من &quot؛I&#39؛ لقد كنت تحت الطلب.&quot؛

يقوم كل موفر خطاف ويب تقريبًا بتوقيع الحمولة باستخدام HMAC ويضع النتيجة في رأس. مهمتك هي حساب نفس HMAC والمقارنة. عندما لا يتطابق &#39؛t، لا يمثل التوقيع المشكلة أبدًا. البايتات هي المشكلة. أنت لا تقوم بتجزئة ما قاموا بتجزئة.

المشتبه بهم المعتادون:

  1. لقد قمت بتجزئة النص الذي تم تحليله وإعادة تسلسله. قام إطار العمل الخاص بك بتحليل JSON إلى كائن، اتصلت به JSON.stringify() عليه، والآن يختلف ترتيب المفاتيح أو المسافة البيضاء بحرف واحد. يجب عليك تجزئة خام نص الطلب، البايتات كما وردت. في Express هذا يعني التقاط المخزن المؤقت الخام من قبل express.json() يصل إليه؛ في لارافيل يعني $request->getContent()لا $request->all().
  2. سطر جديد زائدة. يقوم بعض العملاء بإلحاق واحد. المزود لم &#39؛t.
  3. أنت &#39؛ قم بتجزئة السلسلة المشفرة سداسيًا عشريًا بدلاً من البايتات الأولية، أو مقارنة السداسي مع القاعدة 64.
  4. مجموعة الأحرف. يحتوي الجسم على شخصية متعددة البايت وشيء ما على طول الطريق قام بتحويله.

ال مولد هاش هي الطريقة التي أعزل بها هذا: خذ سلسلة الجسم بالضبط، وقم بتجزئةها، وقارنها بما أنتجه الكود الخاص بي وما هو عليه يعتقد كان نفس الجسم. إذا اختلفت هاتان التجزئة، فإن الكود الخاص بي لا يرى البايتات التي أعتقد أنها &#39؛s، ولم تكن المشكلة أبدًا في التشفير على الإطلاق. (يستحق المعرفة أيضًا: إذا كان المزود لا يزال يقدم توقيعات MD5 أو SHA-1، فإن ذلك &#39؛s إشارة حول عمر منصته. SHA-256 هو الأرضية الآن.)

ما الذي يعيش أيضًا في مجموعة علامة التبويب تصحيح الأخطاء؟

طاقم الممثلين الداعمين - الأقل بريقًا، لا يزال يكتسب مكانه

  • مولد يوويد- للنظافة X-Request-ID في كل مكالمة اختبارية، يمكنك تصفحها عبر ثلاث خدمات &#39؛ السجلات بعد ذلك. يستحق معرفة أن UUIDs حصلت على تحديث للمواصفات: RFC 9562 (2024) عفا عليه الزمن RFC 4122 وموحدة UUIDv7، وهو أمر مرتب زمنيًا وبالتالي فهو أكثر لطفًا إلى حد كبير مع قاعدة البيانات الخاصة بك و#39؛s فهرس B-tree من الإصدار العشوائي v4. إذا كنت &#39؛قم باختيار نظام معرف لجدول جديد اليوم، فهذا &#39؛ هو الذي يجب قراءته. هناك &#39؛س أ تفصيل أطول لإصدارات UUID إذا كنت تريد ذلك.
  • محول BASE64- ل Authorization: Basic الرؤوس (RFC 7617: it&#39؛s base64(user:password)ونعم، ترميز that&#39؛s، وليس الأمان - TLS هو ما يحميه)، وبالنسبة للنقط الثنائية المضمنة، يتم إدخال بعض عناصر واجهات برمجة التطبيقات في حقول JSON. يكلفك Base64 ~ 33% من الحجم الزائد، ولهذا السبب &quot؛ كبير وحاصل بشكل غير متوقع؛ غالبًا ما تحتوي الحمولة على ملف فقط. ال دليل Base64 الكامل يغطي تمييز base64url الذي يعرقل الناس.
  • مدقق يمل- لأن نصف حالات فشل واجهة برمجة التطبيقات الخاصة بي في العام الماضي كانت &#39؛t حالات فشل واجهة برمجة التطبيقات. لقد كانت عبارة عن خطأ في المسافة البادئة بمسافتين في تكوين CI، ولم يتم نشر نقطة النهاية على الإطلاق. (يحتوي YAML على وضع فشل أكثر شرًا من البناء المعطل، على الرغم من ذلك: YAML صالح يعني شيئًا لم تفعله &#39؛ لا يقصد. لقد كتبت لماذا version: 1.10 يصبح 1.1 بعد أن كلفني النشر.)
  • اختبار regex- في الوقت الحالي، تحتاج إلى سحب معرف الطلب من 900 سطر من السجل بنمط you&#39؛ لست واثقًا منه.
  • عارض CSV- بالنسبة لنقطة نهاية التصدير التي تحتاج إلى التحقق من سلامة إنتاجها قبل أن يستوردها شخص ما إلى الإنتاج.

هل من المهم حقًا أن يتم تشغيل هذه الأجهزة في المتصفح؟

نعم، وI&#39؛أقول هذا حتى لو كنت قد قمت ببناء الموقع &#39؛t.

فكر فيما تصقفه في أداة تصحيح الأخطاء. JWT - وهو الاعتماد المباشر حتى تنتهي صلاحيته. استجابة واجهة برمجة تطبيقات الإنتاج، وهي بيانات العميل: الأسماء ورسائل البريد الإلكتروني وحالات الاشتراك. نص خطاف الويب، والذي قد يحتوي على سجل الدفع. أ curl الأمر مع Authorization رأس لا يزال فيه.

الآن ضع في اعتبارك أن الأداة من جانب الخادم، بحكم تعريفها، تتلقى كل ذلك. ليس بشكل ضار - فقط من الناحية المعمارية. ينتقل اللصق إلى طلب HTTP، ويضرب الواجهة الخلفية لشخص ما &#39؛، ويهبط في أي تسجيل يقوم بتشغيله. حتى المشغل الصادق تمامًا ينتهي به الأمر برمز حامله المميز في سجل وصول لم ينوي الاحتفاظ به أبدًا.

الأدوات الموجودة على Toolz.dev تقوم بالعمل في JavaScript في علامة التبويب الخاصة بك. لم يتم تحميل أي شيء، لأنه لا يوجد مكان لتحميله إليه - التحليل وفك التشفير والتجزئة كلها تحدث على جهازك. لا تفعل &#39؛ يجب أن أعتبر كلامي لذلك، إما: افتح DevTools، وانتقل إلى علامة تبويب الشبكة، والصق رمزًا مميزًا، وشاهد طلبًا لا يأتي أبدًا. هذا &#39؛ تدقيق مدته ثلاثون ثانية، ويجب عليك تشغيله أي أداة تقوم بلصق الأسرار فيها، بما في ذلك أسرارتي. كتبت كيفية التحقق من أداة من جانب العميل بشكل صحيح لهذا السبب بالضبط.

إذا كانت مؤسستك تتعامل مع البيانات الشخصية للاتحاد الأوروبي، فهذا هو &#39؛ النظافة فقط - يعد لصق سجلات العملاء في خادم طرف ثالث نشاط معالجة، مع كل ما يتضمنه ذلك من أوراق اللائحة العامة لحماية البيانات. تتجنب الأدوات من جانب العميل السؤال من خلال عدم التحول إلى معالج على الإطلاق.

سير العمل الذي يلتصق في الواقع

ست خطوات، بالترتيب الذي أديرها به عندما يشتعل شيء ما &#39؛s:

  1. التقاط الاستجابة الخام. كامل الجسم، رؤوس كاملة، رمز الحالة. ليس تطبيقك وتفسير #39؛ له - البايتات الفعلية. curl -i أو علامة تبويب الشبكة &#39؛s &quot؛نسخ كـ cURL.&quot؛
  2. تنسيقه. تنسيق JSON. أنظر إلى شكل قبل أن تنظر إلى القيم. هل الحقل الذي تحتاجه موجود حتى؟
  3. فك تشفير كل سلسلة معتمة. الرموز من خلال JWT فك التشفير، Base64 النقط من خلال محول BASE64، عناوين URL المشوهة من خلال تشفير URL. تخفي السلاسل غير الشفافة الإجابة بشكل مدهش في كثير من الأحيان.
  4. تحويل كل رقم يمكن أن يكون وقتًا إلى تاريخ. محول الطابع الزمني. عد الأرقام أولا.
  5. فرق ضد استجابة معروفة جيدة. فرق JSON. إذا كنت لا تفعل ذلك &#39؛ لديك استجابة معروفة وجيدة، فهذه هي علامتك لبدء حفظها.
  6. الآن فقط اذهب لقراءة الرمز الخاص بك. عند هذه النقطة، عادةً ما تعرف السطر قبل فتح الملف.

الترتيب مهم. الخطوة 6 هي المكان الذي كنت أبدأ فيه، وهي &#39؛ ولهذا السبب استغرق يوم السبت ثماني ساعات.


الأسئلة الشائعة

ما هي أفضل الأدوات المجانية لتصحيح أخطاء واجهات برمجة التطبيقات؟

لتصحيح أخطاء واجهة برمجة التطبيقات اليومية، تحتاج إلى خمسة أشياء: منسق JSON ومدقق الحسابات، ووحدة فك ترميز JWT، ومحول الطابع الزمني Unix، وأداة الفرق، ومشفر/وحدة فك ترميز URL. كل الخمسة مجانية على Toolz.dev وتعمل بالكامل في المتصفح. أضف مولد تجزئة إذا كنت تعمل باستخدام خطافات الويب الموقعة، ومدقق YAML إذا كانت عمليات النشر الخاصة بك تعتمد على التكوين.

هل من الآمن لصق استجابة JWT أو API في أداة عبر الإنترنت؟

فقط إذا كانت الأداة من جانب العميل. JWT عبارة عن بيانات اعتماد مباشرة واستجابة واجهة برمجة التطبيقات عادة ما تكون بيانات العميل، لذا فإن الأداة من جانب الخادم تعني شحن كليهما إلى واجهة خلفية غريبة &#39؛s. تقوم أدوات Toolz.dev بمعالجة كل شيء في متصفحك باستخدام JavaScript ولا ترسل أي شيء عبر الشبكة - تحقق من ذلك بنفسك عن طريق فتح DevTools&#39؛ علامة تبويب الشبكة أثناء اللصق. قم بتشغيل نفس التحقق من أي أداة تستخدمها مع البيانات الحساسة.

لماذا يقول JWT الخاص بي &quot؛ منتهية الصلاحية والاقتباس؛ عندما قمت بإنشائها للتو؟

السبب الأكثر شيوعًا هو عدم تطابق الوحدات. ال exp المطالبة تكون بالثواني (يعرفها RFC 7519 بأنها NumericDate)، ولكن JavaScript&#39؛s Date.now() تُرجع أجزاء من الثانية، لذا فإن مقارنتها مباشرة تجعل كل رمز مميز يبدو منتهية الصلاحية. فك تشفير الرمز المميز، اقرأ expقم بتحويله إلى تاريخ حقيقي باستخدام محول الطابع الزمني، وتحقق مما إذا كان قد مضى بالفعل قبل لمس رمز المصادقة الخاص بك.

كيف يمكنني معرفة ما إذا كان الطابع الزمني لنظام Unix بالثواني أم بالمللي ثانية؟

عد الأرقام. عشرة أرقام هي ثواني، وثلاثة عشر ميلي ثانية، وستة عشر ميكروثانية. إذا ظهر تاريخ في عام 1970، فقد قمت بإطعام الثواني لمحلل ميلي ثانية؛ إذا صدر في عام 56122، فإنك تغذي محلل ميلي ثانية إلى ثانية. الخطأ الثاني أخطر لأنه لا يوجد خطأ.

هل يمكنني استخدام هذه الأدوات لتصحيح أخطاء واجهات برمجة تطبيقات GraphQL؟

نعم. استجابات GraphQL هي JSON، لذا يعمل منسق JSON وفرق JSON دون تغيير، ويستخدم GraphQL عادةً نفس مصادقة الرمز الحامل you&#39؛ فك التشفير باستخدام وحدة فك ترميز JWT. والفرق الحقيقي الوحيد هو أن GraphQL يُرجع HTTP 200 باستخدام ملف errors المصفوفة بدلاً من الحالة غير 2xx، لذلك قم دائمًا بتنسيق النص - يكون الفشل داخل الحمولة، وليس في رمز الحالة.

لماذا يفشل التحقق من توقيع webhook الخاص بي دائمًا؟

دائمًا تقريبًا لأنك تقوم بتجزئة بايتات مختلفة عما قام به الموفر. إذا قام إطار العمل الخاص بك بتحليل نص JSON وقمت بإعادة تسلسله قبل التجزئة، فقد تغيرت المسافة البيضاء أو ترتيب المفاتيح ولن يتطابق HMAC أبدًا. قم بتجزئة نص الطلب الأولي تمامًا كما تم استلامه، وتحقق من وجود سطر جديد لاحق تمت إضافته بواسطة عميل HTTP الخاص بك.

ما الفرق بين ترميز Base64 وbase64url؟

استخدامات القاعدة القياسية 64 (RFC 4648 §4) + و / في أبجديتها ومنصاتها مع =. base64url (RFC 4648 §5) يستبدل تلك بـ - و _ وعادةً ما يتم إسقاط الحشو، لذا تكون القيمة آمنة لوضعها في عنوان URL أو JWT. تؤدي تغذية بيانات base64url إلى وحدة فك ترميز قياسية صارمة-Base64 إلى حدوث خطأ أو قمامة، ولهذا السبب يتفوق جهاز فك ترميز JWT المخصص على فك تشفير الرمز المميز يدويًا.

كيف يمكنني تصحيح استجابة 401 غير مصرح بها؟

العمل إلى الخارج من الرمز المميز. فك تشفيرها والتحقق منها exp مقابل الوقت الحالي - الرمز المميز منتهي الصلاحية هو السبب الوحيد الأكثر شيوعًا، وهو غير مرئي حتى تقوم بتحويل المطالبة إلى تاريخ قابل للقراءة. إذا كان الرمز المميز مباشرًا، فتحقق من Authorization الرأس نفسه: يجب أن يكون المخطط موجودًا ومكتوبًا بشكل صحيح (Bearer <token>مسافة واحدة، بدون علامات اقتباس)، والرمز المميز الذي يتم لصقه من محطة غالبًا ما يحمل سطرًا جديدًا زائدًا يكسر التطابق. بعد ذلك، قم بتأكيد aud و iss تتطابق المطالبات مع ما تتوقعه واجهة برمجة التطبيقات، نظرًا لأن الرمز المميز الصالح الصادر لجمهور مختلف يتم رفضه تمامًا مثل الرمز السيئ. عندها فقط ابدأ في الشك في الخادم.

كيف يمكنني فك تشفير JWT بدون مكتبة؟

Jwt عبارة عن ثلاثة أجزاء أساسية 64url متصلة بالنقاط. قم بتقسيم النقاط، ثم قم بفك تشفير base64url للاثنين الأولين - الرأس والحمولة - وكلاهما يخرج كـ JSON عادي. الجزء الثالث هو التوقيع، ولا يتم فك تشفيره إلى أي شيء يمكن قراءته لأنه بايت خام وليس نصًا. وهذا مهم أكثر مما يبدو: فك تشفير الرمز المميز يخبرك بما يدعيه، وليس ما إذا كانت هذه المطالبات صحيحة. يتطلب التحقق من التوقيع مفتاح المُصدر &#39؛ وينتمي إلى رمز الخادم الخاص بك، وليس في أداة المتصفح مطلقًا. اقرأ الرموز المميزة هنا لتصحيح الأخطاء؛ التحقق من صحتها في التطبيق.

هل ما زلت بحاجة إلى ساعي البريد أو الأرق إذا استخدمت هذه الأدوات؟

نعم - إنهم يحلون مشاكل مختلفة. يرسل عميل API الطلبات؛ هذه الأدوات تجعل الاستجابات مقروءة. من الناحية العملية، أستخدم العميل لإطلاق الطلب ونسخ المخرجات الأولية، ثم الانتقال إلى أدوات المتصفح لتنسيقه وفك تشفيره وتحويله وتغييره. يجلسون بجانب بعضهم البعض في سير العمل بدلاً من استبدال بعضهم البعض.

Frequently Asked Questions

For day-to-day API debugging you need five things: a JSON formatter and validator, a JWT decoder, a Unix timestamp converter, a diff tool, and a URL encoder/decoder. All five are free on toolz.dev and run entirely in the browser. Add a hash generator if you work with signed webhooks, and a YAML validator if your deploys are config-driven.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!