تنفيذ تسجيل الخروج وإدارة الجلسة من OIDC: دليل كامل
استكشف التوثيق وإدارة الجلسة في OIDC بعمق. تعلم كيفية تنفيذ خروج OIDC المبادر من العميل و IdP والخروج عبر القناة الخلفية لتحقيق معالجة أمنة للجلسة.
استكشف التوثيق وإدارة الجلسة في OIDC بعمق. تعلم كيفية تنفيذ خروج OIDC المبادر من العميل و IdP والخروج عبر القناة الخلفية لتحقيق معالجة أمنة للجلسة.
OpenID Connect (OIDC) هي طبقة هوية بسيطة مبنية على بروتوكول OAuth 2.0. تسمح للعملاء بالتحقق من هوية المستخدم النهائي بناءً على التوثيق الذي يتم بواسطة خادم التفويض، وكذلك للحصول على معلومات الملف الشخصي الأساسية عن المستخدم النهائي بطريقة قابلة للتشغيل المتبادل وشبيهة بالأمان في REST.
تم تصميم OIDC لتكون سهلة الاستخدام والتنفيذ، مع التركيز على البساطة والمرونة. هي مستخدمة على نطاق واسع لتسجيل الدخول الموحد (SSO) والتحقق من الهوية في تطبيقات الويب، وتطبيقات المحمول، وواجهات برمجة التطبيقات.
يعد فهم حالة التوثيق وإدارة الجلسات في OIDC أمرًا حاسمًا. توضح هذه المقالة كيفية إدارة جلسات OIDC وحالة توثيق المستخدم في سياق التفاعلات بين مزود الهوية (IdP) والطرف المعتمد (RP) أو مزود الخدمة (SP).
تتضمن هذه المقالة عدة مصطلحات رئيسية:
لفهم إدارة جلسة OIDC وحالة توثيق المستخدم بشكل أفضل، دعنا نراجع بإيجاز تدفق توثيق OIDC لتطبيق ويب:
تُنشأ جلسة تسجيل دخول عندما يسجل المستخدم دخوله إلى IdP. تُستخدم هذه الجلسة لتتبع حالة توثيق المستخدم في IdP. تتضمن الجلسة عادة معلومات مثل هوية المستخدم ووقت التوثيق ووقت انتهاء صلاحية الجلسة. تُنشأ عندما يسجل المستخدم دخوله لأول مرة وتستمر حتى يقوم المستخدم بتسجيل الخروج أو تنتهي صلاحية الجلسة.
سيتم ضبط ملف تعريف الجلسة بأمان في متصفح المستخدم للحفاظ على حالة الجلسة. يُستخدم ملف تعريف الجلسة لتحديد جلسة المستخدم وتوثيقه لطلبات التوثيق اللاحقة. يتم ضبط هذا الملف عادةً بالعلامتين HttpOnly وSecure لمنع الوصول من جانب العميل وضمان التواصل الأمن.
لكل RP يصل إليه المستخدم من أجهزة أو متصفح مختلف، سيتم إنشاء جلسة تسجيل دخول منفصلة. يعني هذا أن حالة توثيق المستخدم يتم الاحتفاظ بها بشكل منفصل لكل RP. إذا قام المستخدم بتسجيل الخروج من RP واحد، سيظل المستخدم موثقًا في RPs الأخرى حتى تنتهي صلاحية الجلسة أو يقوم المستخدم بتسجيل الخروج من جميع RPs.
تسمح هذه الإدارة المركزية للجلسات أيضًا لـ IdP بالحفاظ على حالة توثيق مستقرة عبر العديد من RPs طالما كانت جلسة المستخدم نشطة وطلبات التوثيق تأتي من نفس الوكيل المستخدم (الجهاز/المتصفح). تُمكّن هذه الآلية قدرات SSO حيث يمكن للمستخدم الوصول إلى العديد من RPs دون الحاجة إلى تسجيل الدخول مرة أخرى.
في OIDC، يعتمد تطبيق العميل (RP) على التوكنات الصادرة عن IdP للتحقق من هوية المستخدم وحالة توثيقه أو إذنه. يتم الحفاظ على "جلسة تسجيل الدخول" في جانب العميل بواسطة التوكنات الصادرة عن IdP.
offline_access، قد يتلقى تطبيق العميل توكن تجديد. يوفر وسيلة لتمديد حالة توثيق المستخدم دون الحاجة إلى إعادة التوثيق. يمكن لتطبيق العميل استخدام توكن التجديد للحصول على توكن وصول جديد عند انتهاء صلاحية التوكن الحالي. طالما كان توكن التجديد صالحًا، يمكن الحفاظ على حالة توثيق المستخدم دون الحاجة إلى تفاعل المستخدم.يجمع بين هذه التوكنات ليمكن تطبيق العميل من الحفاظ على حالة توثيق المستخدم والوصول إلى الموارد المحمية نيابة عنه. يجب على تطبيق العميل تخزين هذه التوكنات بشكل أمن وإدارة دورة حياتها. (مثلاً لتطبيقات SPA، يمكن تخزين التوكنات في التخزين المحلي أو تخزين الجلسة في المتصفح. لتطبيقات الويب، يمكن تخزين التوكنات في بيانات الجلسة في جهة الخادم أو الكوكيز.)
عملية تسجيل الخروج في OIDC تعد مفهومًا متعدد الأوجه بسبب مشاركة كل من جلسات تسجيل الدخول المركزية المدارة من IdP والتوكنات الموزعة في جانب العميل.
لتسجيل الخروج أو إلغاء حالة توثيق المستخدم في جانب العميل، يعد أمرًا بسيطًا نسبيًا. يمكن لتطبيق العميل إزالة التوكنات المخزنة (توكن ID، توكن الوصول، وتوكن التجديد) من المتصفح أو الذاكرة للمستخدم. إن هذا الإجراء يلغي عمليًا حالة توثيق المستخدم في جانب العميل.
لتطبيقات الويب التي تدير جلسات تسجيل دخول المستخدم الخاصة بها، قد تكون هناك خطوات إضافية ضرورية. تتضمن هذه الخطوات مسح كوكيز الجلسة وأي بيانات جلسة (مثل التوكنات الصادرة عن مزود الهوية) لضمان تسجيل خروج المستخدم بالكامل.
يحافظ IdP على جلسة تسجيل دخول مركزية لكل مستخدم. طالما كانت هذه الجلسة نشطة، قد يتم توثيق المستخدم تلقائيًا حتى لو تم مسح التوكنات في جانب العميل، مما يسمح بإصدار توكنات جديدة لتطبيق العميل دون الحاجة إلى تفاعل إضافي مع IdP.
لتسجيل خروج المستخدم بالكامل من IdP، يمكن لتطبيق العميل (RP) بدء طلب تسجيل خروج إلى IdP. يجب على التطبيق (RP) إعادة توجيه المستخدم إلى نقطة نهاية إنهاء الجلسة في IdP لإنهاء جلسة التسجيل ويمكن تنقية ملفات تعريف الجلسة. يضمن هذا تسجيل خروج كامل عبر جميع التطبيقات (RPs) التي تشارك نفس الجلسة المركزية. بمجرد إنهاء جلسة التسجيل، كلما تلقى IdP طلب توكن من أي من التطبيقات المرتبطة بنفس الجلسة، سيطلب من المستخدم إعادة التوثيق.
في بعض الحالات، عندما يقوم المستخدم بتسجيل الخروج من تطبيق واحد (RP)، قد يرغب أيضًا في أن يتم تسجيل الخروج تلقائيًا من جميع التطبيقات الأخرى (RPs) دون أي تفاعل إضافي من المستخدم. يمكن تحقيق ذلك باستخدام آلية تسجيل الخروج عبر القناة الخلفية.
عندما يتلقى IdP طلب تسجيل خروج من RP، فإنه لا يقوم فقط بمسح جلسة التسجيل، بل يرسل أيضًا إشعار تسجيل خروج عبر القناة الخلفية إلى جميع RPs التي تستخدم نفس الجلسة ولديها نقطة نهاية تسجيل خروج عبر القناة الخلفية مسجلة.
عندما تتلقى RPs إشعار تسجيل الخروج عبر القناة الخلفية، يمكنها القيام بالإجراءات اللازمة لمسح جلسة المستخدم والتوكنات، مما يضمن تسجيل خروج المستخدم بالكامل من جميع التطبيقات.