هناك العديد من المفاهيم الخاطئة الشائعة حول نظرية الحرب العادلة. أحدها ، على سبيل المثال ، أن 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. ( - — ).
. ( , "" ) , , .
. , . "" API . JWT , — JWT .
, JWT — , , - , .
, , JWT . ( Redis) . — , .
. JWT , JWT ( )? , "-" . "-" .
"-" . "-" , . , , , - .
هناك مشكلة واحدة مثيرة للاهتمام تتعلق بإلغاء الرموز "المشروطة". إذا تم إطلاق سراحهم إلى أجل غير مسمى ، ففي حالة الإلغاء ، سيتعين أيضًا تخزينهم إلى أجل غير مسمى. إذا قمت بتحريرها لفترة معينة ، فسيتم تسجيل الخروج من الجلسة "الأبدية" ، إذا لم يكن هناك استدعاء لواجهة برمجة التطبيقات أثناء صلاحية الرمز المميز.
apapacy@gmail.com
9 ديسمبر 2020