ID Token أم Access Token: خطأ شائع في تطبيقات تسجيل الدخول

ID Token أم Access Token: خطأ شائع في تطبيقات تسجيل الدخول

الفرق بين ID Token و Access Token في OIDC/OAuth، ولماذا استخدام أحدهما مكان الآخر يخلق أخطاء أمنية وتصميمية.

مقارنة مباشرة

الفرق بين ID Token وAccess Token في OIDC/OAuth، ولماذا استخدام أحدهما مكان الآخر يخلق أخطاء أمنية وتصميمية.

2خيارات
4معايير

في أنظمة OAuth 2.0 و OpenID Connect قد يحصل التطبيق على أكثر من Token، وتشابه شكلها—خصوصًا عندما تكون JWT— يجعل بعض المطورين يعاملونها كأنها الشيء نفسه. لكنها تخدم أغراضًا مختلفة. ID Token يخبر Client عن حدث المصادقة وهوية المستخدم ضمن OpenID Connect، بينما Access Token هو credential مخصص للوصول إلى Resource Server/API ضمن Scope محدد. الخلط بينهما يضع الثقة في مكان غير صحيح.

ID Token موجهة لل Client

ID Token تحتوي Claims مثل issuer و subject و audience وربما auth_time وغيرها. ال ـClient يتحقق منها ليعرف أن مزود الهوية صادق على المستخدم. Audience يجب أن تتضمن ال ـClient المقصود. لا ينبغي إرسال ID Token عشوائيًا إلى APIs باعتبارها تصريح وصول.

Access Token موجهة لل Resource Server

API تستقبل Access Token وتتحقق من صلاحيتها و scope/audience حسب تصميم المزود. ال ـClient لا يجب أن يفترض شكلها الداخلي؛ قد تكون JWT أو opaque token. ما يهم هو أنها تصريح للوصول إلى مورد، لا بطاقة هوية للمستخدم.

خطوات عملية

  1. حدد من أصدر Token.
  2. حدد الجمهور المقصود.
  3. حدد Resource/Scope.
  4. تحقق من signature/introspection حسب النظام.
  5. ارفض Token لم تُصدر لل ـAPI المقصودة.

لا تستخدم Claims بلا تحقق

فك JWT Base64 لا يعني التحقق منها. يجب التحقق من signature و issuer و audience و exp وغيرها وفق المكتبة والبروتوكول. كذلك لا تثق في email كمعرف ثابت إذا كان provider يحدد subject مختلفًا.

قائمة مراجعة

  • Signature verified.
  • Issuer مطابق.
  • Audience صحيحة.
  • Expiry لم تنتهِ.
  • Scope مناسب لل API.
  • Subject يستخدم كمعرف وفق تصميم المزود.

ماذا عن Refresh Token؟

Refresh Token تستخدم للحصول على Access Tokens جديدة وغالبًا أطول حساسية من Access Token نفسها. لا ترسلها إلى Resource APIs، وخزنها بطريقة آمنة وطبق rotation/revocation عندما يدعم المزود ذلك.

صمم الحدود بين Frontend و Backend

في تطبيقات الويب، تجنب توزيع Tokens أكثر مما يلزم. Backend يمكن أن يحتفظ ببعض الاعتمادات ويمنح Browser Session مناسبة بدل كشف Refresh Token للواجهة. القرار يعتمد على architecture، لكن المبدأ هو أقل exposure ممكن.

اختبر Audience الخاطئة عمدًا

ضمن اختبارات الأمان، أرسل Access Token مخصصة لخدمة A إلى خدمة B وتأكد أنها تُرفض، وافعل الشيء نفسه مع ID Token في endpoint يتوقع Access Token. هذه الاختبارات السلبية تكشف APIs تقبل أي JWT موقعة من نفس issuer بلا تحقق كافٍ من aud أو scope. التحقق الصحيح يجب أن يثبت أن Token صالحة لهذا المورد تحديدًا، لا أنها تبدو أصلية فقط.

ID Token مقابل Access Token

المعيارID TokenAccess Token
الغرضإثبات حدث المصادقة وهوية المستخدم لل ـClientتفويض الوصول إلى API أو مورد محمي
الجهة المستفيدةتطبيق العميل / Relying PartyResource Server أو ال ـAPI المقصود
الاستخدام المعتادبناء سياق تسجيل الدخول وقراءة claims الهويةإرساله مع طلبات الوصول المصرح بها
خطأ يجب تجنبهاستخدامه كتذكرة عامة لاستدعاء APIsقبوله خارج الجمهور أو النطاق الذي صدر له
هل تريد الاحتفاظ بالمقال أو إعادة استخدامه؟
مجتمع إيجي تاجعن المجتمع

شارك في تقييم ونقاش المقال

رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.

تفاعل مع المقالاختر التفاعل المناسب، ويمكنك تغيير رأيك لاحقًا.
قيّم جودة المقاللا توجد تقييمات بعد — كن أول من يقيّم.

نقاش القراء

النقاش

جارٍ تحميل التعليقات…

بعد هذه المادة

تابع القراءة

كل مواد #الحسابات والهوية الرقمية
مرتبطة بنفس الوسوم04
  1. 02
  2. 03
  3. 04
اختيار القراء

الأكثر قراءة

الترتيب الكامل
  1. 01
يتجدد مع النشر

أحدث المواد

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06