
في مقال سابق ، تحدثت عن أساسيات JWT
. إذا كان الأمر في متناول يديك ، فهذا هو المفتاح الذي نفتح به الباب أمام الموارد الخاصة. ولكن ماذا لو سُرق هذا المفتاح (على وجه أكثر دقة ، فسوف يقوم بنسخ مكررة). بعد ذلك ، سيتمكن شخص آخر من تسجيل الدخول إلى الخادم باسمك ، وقد لا نعرف حتى ذلك. لا نريد السماح بهذا السيناريو. ولكن ماذا تفعل؟
زيادة الأمن
أقترح على القراء ، قبل الانتقال بشكل مستقل ، أن يفكروا فيما يمكن أن نفعله مع الأمن.
فيما يلي بعض الطرق التي يمكن أن تحسن الأمان. يمكنك أن تكتب في التعليقات الأساليب الأخرى الموجودة - سأضيفها.
- باستخدام بروتوكول
https
، الذي يحمي قناة البيانات عبر الإنترنت. في الواقع ، هذا ملف مجم على http
، والذي يفرض بروتوكولات تشفير إضافية - SSL
و TLS
- إضافة معلومات
IP
إلى payload
. ثم الرمز المميز من IP
الأخرى لن يمر التحقق. لكن IP
يمكن أن تكون مزيفة ، وماذا تفعل مع عناوين IP
الديناميكية أو عندما يتصل المستخدم من هاتف في مقهى أو مترو. لذلك ، لن نستخدم هذا النهج. - استخدم
RS256
. هذا يضمن أمن المفتاح الخاص نفسه. ولكن مع الرموز ، كل شيء يبقى تماما كما كان. نحتاج إلى RS256
عندما نخشى تمرير المفتاح السري إلى خوادم أخرى ، والتي قد لا تكون موثوقة. نمنحهم أداة مصادقة رمزية فقط ، وهي عديمة الفائدة تمامًا للمهاجمين. - استخدام الرموز قصيرة الأجل. ولكن سيتعين على المستخدم إعادة تسجيل الدخول في كل مرة تنتهي صلاحيتها. سوف يشعر المستخدم بالملل عاجلاً أم آجلاً وسيغادر مواردنا.
- لكن ماذا لو استخدمت رموزًا قصيرة الأجل على أي حال ، لكن أعطتها رمزًا آخر ، والغرض منها فقط هو الحصول على رمز جديد قصير الأجل دون إذن جديد؟ يسمى هذا الرمز المميز "رمز تحديث" وسيكون من الممكن استخدامه مرة واحدة فقط. سيكون هذا مقالتي.
أذكر ما هو JWT
تستفيد JWT
من JWE
تشفير JWS
(التوقيع) و JWE
(تشفير). لا يسمح التوقيع لشخص ما بتزوير رمز مميز دون معلومات حول المفتاح السري ، ويحمي التشفير من قراءة البيانات من قِبل جهات خارجية.
دعونا نرى كيف يمكنهم مساعدتنا في مصادقة المستخدم وترخيصه على الموقع.
المصادقة ( المصادقة الإنجليزية ؛ من اليونانية. aut [authentikos] - حقيقية ، أصيلة ؛ من αὐθέντης [authentes] - المؤلف) - إجراء المصادقة. في حالتنا ، نتحقق من كلمة مرور تسجيل الدخول + لمطابقة الإدخال في قاعدة بيانات بيانات المستخدم.
إذن (إذن باللغة الإنجليزية - إذن ، إذن) - تزويد المستخدم بالحق في القيام ببعض الإجراءات ؛ وكذلك عملية التحقق من (تأكيد) هذه الحقوق عند محاولة تنفيذ هذه الإجراءات.
بمعنى آخر ، تتحقق المصادقة من شرعية المستخدم ، وبعد ذلك ، إذا كان كل شيء على ما يرام ، يصبح المستخدم مصرحًا ، أي أنه يمكنه تنفيذ الإجراءات المسموح بها باستخدام قاعدة البيانات. عادة ، يتم الجمع بين هاتين العمليتين ، وبالتالي هناك ارتباك معروف.
أنواع الرموز
- رموز الوصول (JWTs) هي الرموز المميزة التي يمكن استخدامها للوصول إلى الموارد المحمية. فهي قصيرة الأجل ، ولكن قابلة لإعادة الاستخدام . قد تحتوي على معلومات إضافية ، مثل العمر ، أو عنوان
IP
من حيث يأتي الطلب. كل هذا يتوقف على رغبة المطور. - تحديث الرمز المميز (RT) - تؤدي هذه الرموز المميزة مهمة محددة واحدة فقط - الحصول على رمز وصول جديد. وهذه المرة لا يمكنك الاستغناء عن خادم التخويل. إنها طويلة الأجل ، لكن يمكن التخلص منها .
حالة الاستخدام الرئيسية هي: بمجرد انتهاء صلاحية JWT
القديم ، لم يعد بإمكاننا تلقي بيانات خاصة بها ، ثم نرسل RT
ونتلقى زوجًا جديدًا من JWT+RT
. مع JWT
الجديد JWT
يمكننا العودة مرة أخرى إلى الموارد الخاصة. بالطبع ، يمكن أن يحدث رمز منعش بشكل سيء ، لكنه لن يحدث قريبًا ، لأنه يعيش لفترة أطول من شقيقه.

تتمثل الفكرة الرئيسية لفصل الرمز المميز في أن الرموز المميزة للمصادقة ، من ناحية ، تسمح لنا بالتحقق بسهولة من مستخدم دون خادم تخويل ، وذلك ببساطة عن طريق مقارنة التوقيعات.
const validateToken = token => { const [ header, payload, signature ] = token.split('.'); return signature === HS256(`${header}.${payload}`, SECRET_KEY); }
من ناحية أخرى ، لدينا
يسمح لنا بتحديث الرمز المميز للوصول دون إدخال كلمة مرور من المستخدم ، ولكن في هذه الحالة ، ما زلنا بحاجة إلى إجراء عملية مكلفة للوصول إلى خادم التخويل.
في الختام
بفضل هذا النهج ، نقوم بتقليل التأخير الزمني للوصول إلى خادم latency
الوصول ، ويصبح منطق الخادم نفسه أكثر بساطة. ومن وجهة نظر أمنية ، إذا سُرق منك رمز وصول ، فلن يكون بمقدور استخدامه سوى فترة زمنية محدودة - ليس أكثر من عمره. حتى يتمكن المهاجم من الاستخدام لفترة أطول ، سيحتاج أيضًا إلى سرقة التحديث ، ولكن بعد ذلك سيعلم المستخدم الحقيقي أنه قد تم اختراقه لأنه سيتم طرده من النظام. وبمجرد تسجيل دخول هذا المستخدم مرة أخرى ، سيتلقى زوجًا محدثًا من JWT+RT
، JWT+RT
إلى قرع.
روابط مفيدة
- لماذا أحتاج إلى تحديث الرمز المميز إذا كان لديّ رمز وصول؟
- تحديث الرموز: متى تستخدمها وكيف تتفاعل مع JWTs
- المزيد من مفاجآت OAuth 2.0: رمز التحديث