ما هو تدوير رمز التحديث ولماذا هو مهم؟
غوص في الموضوع ودعنا نتحدث عن سبب كون تدوير رمز التحديث هو وسيلة فعالة لحماية أمان رموز التحديث الخاصة بك.
ما هو رمز التحديث؟
رمز التحديث هو نوع خاص من الرموز الذي يستخدم للحصول على رمز وصول جديد عندما ينتهي صلاحية رمز الوصول الحالي. اطلع على منشورنا السابق فهم الرموز في OIDC لتتعلم المزيد.
خلال المقدمة، ذكرنا أيضًا أنه في Logto، من أجل حماية أمن رموز التحديث الخاصة بك، قمنا بفرض آلية "تدوير رمز التحديث" بشكل افتراضي.
لكن ما هو "تدوير رمز التحديث" تحديدًا؟ كيف يفيد مستخدمينا النهائيين؟ لنغوص في الموضوع!
ما هو تدوير رمز التحديث؟
تدوير رمز التحديث هو آلية تبطل رمز التحديث السابق وتصدر رمزًا جديدًا عندما يتم استخدام رمز التحديث للحصول على رمز وصول جديد. تضمن هذه الآلية أن يتم تجديد رمز التحديث قبل انتهاء صلاحيته.
لماذ ا نحتاج إلى تدوير رمز التحديث؟
تتمتع رموز التحديث بفترة حياة ممتدة، عادة ما تكون في أسابيع أو حتى أشهر. وبما أننا نستطيع الحصول على رموز وصول جديدة بواسطة رمز التحديث، يصبح رمز التحديث هدفًا جذابًا للمهاجمين أيضًا. ولذلك، وفقًا لـ OAuth 2.0 BCP، يجب على خادم التفويض اتخاذ إحدى التدابير التالية لمنع مثل هذه الهجمات.
- إصدار رموز تحديث مقيدة للمرسل: يوقع العميل ويوفر توقيعًا (
Sec-Token-Binding
) في ترويسة طلب التحديث، بحيث يكون رمز التحديث الصادر مرتبطًا بشكل تشفيري بعميل معين. ومع ذلك، فإن بعض العملاء الأصليين فقط حاليًا هم من تقييد المرسل، ومعظم التطبيقات المنفصلة الحديثة وتطبيقات الجوال هي عامة. - تدوير رمز التحديث: يقوم خادم التفويض بإصدار رمز تحديث جديد (عادة عند التبادل لرمز وصول جديد) وإبطال الرمز السابق. يقلل ذلك من خطر تسريب الرمز.
أفضل الممارسات لتنفيذ تدوير رمز التحديث
في Logto، عندما يتم تسجيل دخول المستخدم بنجاح، سيتم إنشاء كائن Grant
أولًا في قاعدة البيانات وسيحتوي رمز التحديث الصادر بعد ذلك على مرجع grantId
ويشير إلى كائن Grant الأول.
كلما حدث تدوير لرمز التحديث، سيتم وسم رمز التحديث السابق كمستهلك، وسيصدر خادم التفويض في Logto رمز تحديث جديد بنفس grantId
.
لنفرض أن رمز التحديث السابق تم تسريبه، حين ها سيستخدمه العميل الشرعي أو المهاجم لتبادل رمز الوصول. وبغض النظر عن من قام بذلك، يجب أن يكون رمز التحديث المسرب قد تم تدويره ووضع علامة عليه كمستهلك بالفعل. سيبلغ أحدهم الذي استخدم رمز التحديث المستهلك للمرة الثانية خادم التفويض عن الاختراق. سيقوم خادم التفويض بإبطال جميع رموز التحديث بنفس grantId
.
في الحالة أعلاه، بعد إطلاق الإنذار، يمكن للعميل الشرعي فقط إعادة المصادقة من خلال عملية تسجيل الدخول للحصول على رمز تحديث جديد. في حين يفقد المهاجم السيطرة على نظامك ويتم حظره خارجًا.
متى يحدث تدوير رمز التحديث؟
في Logto، يعرف السلوك الافتراضي لتدوير رمز التحديث:
- إذا كان العميل مقيد المرسل أو غير عام (مثل التطبيقات التي تعمل من جانب الخادم)، فإن تدوير رمز التحديث يحدث عندما يصل إلى 70٪ من مجموع الوقت المتبقي له (TTL).
- إذا كان العميل عميلًا عامًا (مثل التطبيقات المنفصلة)، يحدث تدوير رمز التحديث في كل مرة يتم استخدامه لتبادل رمز الوصول. سيعيد رد التبادل الرمزي كلا من رمز الوصول الجديد ورمز التحديث الجديد.