0Pricing
Cryptology Academy · درس

مطالبات OpenID Connect ورموز ID

فكّكوا رموز ID المستندة إلى JWT، وتعرّفوا إلى التحقق من المطالبات، ونفّذوا OIDC على نحو صحيح.

مطالبات OpenID Connect ورموز ID درس مجاني في Cryptology Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cryptology Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

OIDC كطبقة هوية

يضيف OpenID Connect (OIDC) طبقة هوية فوق OAuth 2.0. فبينما يتولى OAuth 2.0 التفويض (ما الذي يمكن لهذا التطبيق الوصول إليه؟)، يجيب OIDC عن سؤال الهوية (من هو المستخدم؟). ويُطبَّق OIDC بإضافة النطاق "openid" إلى طلب OAuth 2.0، مما يجعل خادم التفويض يعيد رمز ID إلى جانب رمز الوصول.

رمز ID بوصفه JWT

رمز ID في OIDC هو JSON Web Token (JWT) يتضمن مطالبات حول المستخدم الذي تمت مصادقته. يوقّع خادم التفويض على JWT باستخدام مفتاحه الخاص (عادةً باستخدام RS256 أو ES256)، ويتحقق الطرف المعتمد (تطبيق العميل) من التوقيع باستخدام المفاتيح العامة المنشورة لخادم التفويض (نقطة نهاية JWKS).

مطالبات رمز ID القياسية

مطالبات رمز ID المطلوبة والشائعة الاستخدام: "sub" (الموضوع، معرّف المستخدم الفريد)، "iss" (الجهة المُصدرة، عنوان URL لخادم التفويض)، "aud" (الجمهور، معرّف العميل)، "exp" (الطابع الزمني لانتهاء الصلاحية بنظام Unix)، "iat" (الطابع الزمني للإصدار بنظام Unix). واختيارية: "auth_time" (وقت حدوث المصادقة)، "nonce" (منع إعادة التشغيل)، "at_hash" (تجزئة رمز الوصول)، "acr" (فئة سياق المصادقة)، "amr" (طرق المصادقة المستخدمة).

نقطة نهاية UserInfo

تعيد نقطة نهاية UserInfo في OIDC مطالبات إضافية حول المستخدم الذي تمت مصادقته عند استدعائها باستخدام رمز وصول صالح. يطلب العملاء مجموعات مطالبات محددة عبر النطاقات: "profile" (الاسم، الصورة، اللغة المحلية)، "email" (البريد الإلكتروني، والتحقق من البريد الإلكتروني)، "address" (العنوان المنسق)، "phone" (رقم الهاتف، والتحقق من رقم الهاتف). وتكون استجابة UserInfo كائن JSON أو JWT.

التحقق من رمز ID: التوقيع

يبدأ التحقق من رمز ID بالتحقق من التوقيع. يجلب العميل مجموعة مفاتيح JWKS (JSON Web Key Set) من خادم التفويض عبر نقطة النهاية المعروفة، ثم يعثر على المفتاح المطابق للمعامل "kid" (معرّف المفتاح) في ترويسة JWT، ويتحقق من توقيع JWT. يثبت ذلك أن الرمز أصدره خادم التفويض الشرعي وأنه لم يتعرض للتلاعب.

التحقق من المطالبات: iss وaud وexp

بعد التحقق من التوقيع، يجب على العميل التحقق من الآتي: يجب أن تتطابق "iss" تمامًا مع عنوان URL المتوقع لخادم التفويض (بما في ذلك المخطط والمسار). يجب أن تتضمن "aud" قيمة client_id الخاصة بالعميل. يجب أن تكون "exp" في المستقبل (مع رفض الرموز المنتهية الصلاحية). وينبغي أن تكون "iat" حديثة بدرجة معقولة. وجميع عمليات التحقق الأربع إلزامية وفقًا لمواصفة OIDC.

Nonce لمنع إعادة التشغيل

تمنع مطالبة nonce هجمات إعادة تشغيل رمز ID. يُنشئ العميل nonce عشوائيًا ويضمّنه في طلب التفويض. ويضمّن خادم التفويض nonce في رمز ID. ويتحقق العميل من تطابق nonce الموجود في رمز ID مع القيمة التي أرسلها. ويمنع ذلك المهاجم الذي يعترض رمز ID من إعادة تشغيله للمصادقة في جلسة مختلفة.

نقاط ضعف رمز ID في التدفق الضمني

عندما يستخدم OIDC التدفق الضمني (response_type=id_token)، يُعاد رمز ID مباشرةً في جزء عنوان URL. ويجب على العميل التحقق من at_hash (تجزئة رمز الوصول) لربط رمز الوصول برمز ID. ومن دون التحقق من at_hash، تصبح هجمات استبدال رمز الوصول ممكنة. وهذا سبب آخر لإهمال التدفق الضمني.

نطاقات OIDC ومطالباته

يحدد OIDC عمليات ربط قياسية بين النطاقات والمطالبات. فنطاق "openid" إلزامي ويعيد مطالبة "sub". ويعيد "profile" المطالبات name وgiven_name وfamily_name وnickname وpicture وwebsite وlocale وzoneinfo وupdated_at. ويعيد "email" المطالبتين email وemail_verified. ويخالف طلب نطاقات غير ضرورية مبدأ الحد الأدنى من الإفصاح، وقد يكشف بيانات مستخدم حساسة.

حقن المطالبات عبر موفري الخدمة الخبيثين

عند تنفيذ تسجيل الدخول عبر عدة موفري OIDC (مثل "Sign in with Google" و"Sign in with GitHub")، تصبح هجمات حقن المطالبات ممكنة. فإذا أنشأ مهاجم حسابًا لدى الموفر B باستخدام عنوان البريد الإلكتروني لضحية تستخدم الموفر A، فقد يتمكن من الوصول إذا طابق التطبيق الحسابات بالاعتماد على مطالبة البريد الإلكتروني وحدها. احرص دائمًا على مطابقة الحسابات باستخدام الزوج (iss, sub)، وليس البريد الإلكتروني وحده.

حالات استخدام التدفق الهجين

يعيد التدفق الهجين في OIDC (response_type=code id_token) كلًا من رمز التفويض ورمز ID من نقطة نهاية التفويض. ويتيح رمز ID التحقق الفوري من الهوية، بينما يُبادَل الرمز للحصول على الرموز عبر القناة الخلفية. ويُستخدم ذلك عندما يحتاج العميل إلى عرض معلومات المستخدم فورًا قبل إكمال تبادل الرموز عبر القناة الخلفية.

التحقق من رمز ID

ما مجموعة المطالبات التي يجب على الطرف المعتمد التحقق منها في رمز ID الخاص بـ OIDC؟

مراجعة الدرس: مطالبات OIDC ورموز ID

يضيف OIDC رمز ID موقّعًا من نوع JWT إلى تدفقات OAuth 2.0. تحقّق من التوقيع (JWKS)، ومن iss (تطابق تام)، ومن aud (client_id)، ومن exp (عدم انتهاء الصلاحية)، ومن nonce (إذا أُرسل). توفر نقطة نهاية UserInfo مطالبات إضافية عبر النطاقات. طابق الحسابات باستخدام الزوج (iss, sub)، وليس البريد الإلكتروني وحده مطلقًا، لمنع حقن المطالبات. التدفق الضمني مُهمل؛ استخدم رمز التفويض مع PKCE في OIDC.

الأسئلة الشائعة

هل درس «مطالبات OpenID Connect ورموز ID» مجاني؟

نعم — نص درس «مطالبات OpenID Connect ورموز ID» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cryptology Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

ماذا ستتعلم في «مطالبات OpenID Connect ورموز ID»؟

فكّكوا رموز ID المستندة إلى JWT، وتعرّفوا إلى التحقق من المطالبات، ونفّذوا OIDC على نحو صحيح. تتمرن على Cryptology Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cryptology Academy؟

لا تُشترط خبرة سابقة. Cryptology Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «مطالبات OpenID Connect ورموز ID»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cryptology Academy هذا؟

نعم. كل درس في Cryptology Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تدفقات OAuth 2.0 وأنواع الرموز
  2. PKCE: تأمين العملاء العامين
  3. مطالبات OpenID Connect ورموز ID
  4. ثغرات OAuth وأنماط الهجوم
← العودة إلى Cryptology Academy