تبسيط JWT

هناك العديد من المفاهيم الخاطئة الشائعة حول نظرية الحرب العادلة. أحدها ، على سبيل المثال ، أن JWT مشفر (في الواقع تم توقيعه وتشفيره باستخدام base64url فقط). من الناحية العملية ، غالبًا ما أواجه حلولًا غريبة إلى حد ما عندما يتم تخزين معرف جلسة واحد فقط في JWT (في الواقع ، إذا كنت تعمل مع جلسة ، فأنت لست بحاجة إلى JWT). بدلاً من ذلك ، يقوم JWT بتخزين معرف مستخدم واحد فقط ، يتم طلب ملف التعريف الخاص به مع كل طلب من قاعدة البيانات (في الواقع ، يكون JWT منطقيًا إذا كنت تريد تقليل عدد الطلبات إلى قاعدة البيانات). أو ، حتى الغريب ، أن JWTs نفسها مخزنة في قاعدة البيانات.







أحد الأسباب الموضوعية لسوء الفهم هذا لدور ومكان JWT هو أن مواصفات JWT تصف تنسيق JWT ، ولا تذكر شيئًا عن كيفية تطبيق JWT.







نشأت الرغبة في الكتابة عن هذا لفترة طويلة. وبعد النظر في مشروع آخر مع استخدام غريب قليلًا لـ JWT ، ما زلت قررت.







لنبدأ بأهم عملية إزالة للغموض. قد تبدو JWT كما يلي:







eyJhbGciOiJSUzI1NiJ9.eyJpcCI6IjE3Mi4yMS4wLjUiLCJqdGkiOiIwNzlkZDMwMGFiODRlM2MzNGJjNWVkMTlkMjg1ZmRmZWEzNWJjYzExMmYxNDJiNmQ5M2Y3YmIxZWFmZTY4MmY1IiwiZXhwIjoxNjA3NTE0NjgxLCJjb3VudCI6MiwidHRsIjoxMH0.gH7dPMvf2TQaZ5uKVcm7DF4glIQNP01Dys7ADgsd6xcxOjpZ7yGhrgd3rMTHKbFyTOf9_EB5NEtNrtgaIsWTtCd3yWq21JhzbmoVXldJKDxjF841Qm4T6JfSth4vvDF5Ex56p7jgL3rkqk6WQCFigwwO2EJfc2ITWh3zO5CG05LWlCEOIJvJErZMwjt9EhmmGlj9B6hSsEGucCm6EDHVlof6DHsvbN2LM3Z9CyiCLNkGNViqr-jkDKbn8UwIuapJOrAT_dumeCWD1RYDL-WNHObaD3owX4iqwHss2yOFrUfdEynahX3jgzHrC36XSRZeEqmRnHZliczz99KeiuHfc56EF11AoxH-3ytOB1sMivj9LID-JV3ihaUj-cDwbPqiaFv0sL-pFVZ9d9KVUBRrkkrwTLVErFVx9UH9mHmIRiO3wdcimBrKpkMIZDTcU9ukAyaYbBlqYVEoTIGpom29u17-b05wY3y12lCA2n4ZqOceYiw3kyd46IYTGeiNmouG5Rb5ld1HJzyqsNDQJhwdibCImdCGhRuKQCa6aANIqFXM-XSvABpzhr1UmxDijzs30ei3AD8tAzkYe2cVhv3AyG63AcFybjFOU8cvchxZ97jCV32jYy6PFphajjHkq1JuZYjEY6kj7L-tBAFUUtjNiy_e0QSSu5ykJaimBsNzYFQ
      
      





إذا قمت بفك تشفيرها باستخدام base64url ، فسيتم تدمير أسطورة "السرية" على الفور:







{"alg":"RS256"}{"ip":"172.21.0.5","jti":"079dd300ab84e3c34bc5ed19d285fdfea35bcc112f142b6d93f7bb1eafe682f5","exp":1607514681,"count":2,"ttl":10} O2Mrn%!OPzN{hk11l\9Mkd    Z&ۚWJP%^DǞ8޹*X؄և|!䵥C&D0Di?Ak
nue7bݟB 6AV*9)S.jNv    `EcG9ތ*6kQDv_xzߥEdgbs<wP(Ӂ"?K ?WxiHp<>,/EU]T䒼-Q+\}PfbuȦ
7�ɦZTJ jhon׿Ӝ-v 6j9ǘ
:!z#fEewQ*44    bl"&t!F    �*s>]+U&8z-@Fap2p\S܇}0hˣŦy*ԛb1H/A�U3bA$)   j)
      
      





الجزء الأول من الأقواس المتعرجة يسمى JOSE Header ويتم وصفه على https://tools.ietf.org/html/rfc7515 . قد تحتوي على حقول من أهمها alg. إذا قمت بتعيين {"alg": "لا شيء"} - يعتبر الرمز المميز صالحًا بدون توقيع. وبالتالي ، يمكن لأي شخص الوصول إلى واجهة برمجة التطبيقات الخاصة بك باستخدام رمز تم إنشاؤه يدويًا دون توقيع. ترفض معظم المكتبات حاليًا مثل هذه الرموز بشكل افتراضي ، ولكن تحقق من واجهات برمجة التطبيقات الخاصة بك فقط في حالة.







— . , , , jti — exp — . , JWT — .







, , . . , ( ). , , JWT.







JWT — JSON, .







"" , , JWT. ( - — ).







  1. . ( , "" ) , , .







  2. . , . "" API . JWT , — JWT .









, JWT — , , - , .







, , JWT . ( Redis) . — , .







. JWT , JWT ( )? , "-" . "-" .







"-" . "-" , . , , , - .







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







apapacy@gmail.com

9 ديسمبر 2020








All Articles