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