ربط النقاط: استكشاف متعمق لمورد OIDC ورموز الوصول JWT الخاصة بك
تهدف هذه المقالة إلى تسليط الضوء على العلاقة بين مؤشرات مورد OIDC ودورها في الحصول على رموز الوصول.
الخلفية
في جلسة سابقة، قدمنا مقدمة عن بروتوكول OpenID Connect (OIDC) ورموز التحديث ورموز الوصول ورموز الهوية، وهي مكونات أساسية لبناء مصادقة قوية في تطبيقك. ومع ذلك، لا تزال هناك أسئلة عالقة في مجتمعنا، مع استفسار متكرر: "لماذا ليس رمز الوصول الخاص بي JWT؟"
للمستجدين على هذه المفاهيم، أو حتى لمن يحتاج إلى تجديد معلوماته، تهدف هذه المقالة إلى تسليط الضوء على العلاقة بين مؤشرات مورد OIDC ودورها في الحصول على رموز الوصول.
فهم موارد OIDC
إذا كنت على دراية ببروتوكول OAuth 2.0، فإن مصطلح “مورد” يجب أن يكون مألوفًا لك. نظرًا لأن OIDC مبني على OAuth 2.0، فإنه يتبنى نفس هذا المفهوم.
“المورد” أو “المورد المحمي” هو تمثيل لكيان ترغب تطبيق العميل في الوصول إليه نيابة عن المستخدم المصادق عليه. قد يكون هذا معلومات المستخدم أو APIs الخادم أو أي بيانات أخرى مخولة من الخادم الخاص بك.
وفقًا للبروتوكول، المورد عبارة عن معلمة في الطلبات إلى خادم التفويض. إنه قيمة ممثلة كـ URI مطلق، مثل https://my-company.com/api
. يعمل كمُعَرِّف للمورد، قد يتوافق مع موقع يعتَمَد على الشبكة أو حتى URI فريد ولكنه افتراضي.
في Logto، يمكنك إنشاء "مورد API" من خلال صفحة "Console الإدارية → موارد API". يمكنك الرجوع إلى هذا التوثيق لمزيد من التفاصيل.
رمز الوصول JWT
رمز الوصول بصيغة JWT (رمز الويب JSON) يُصدر فقط عندما يتم تحديد معلمة "المورد" أثناء طلب رمز الوصول، ويحمل مجموعة من المطالبات التي يمكنك فك تشفيرها والتحقق منها، على سبيل المثال، لضمان صحة الرمز وصلاحيات المستخدم.
ثم يصبح هذا "المورد" واحدًا من مطالبات aud
في JWT، مما يشير إلى الجمهور المستهدف للرمز. انظر RFC-7519.
وبالتالي، تصبح العلاقة واضحة:
- تحديد مؤشر الموارد عند طلب رمز JWT.
- يتماشى مؤشر الموارد مع مطالبة
aud
في الرمز. - عند تقديم طلبات API، يجب تضمين رمز الوصول JWT كعنصر الترويسة للرمز المرسل. يجب أن يقوم خادم API بفك شفرة والتحقق من مطالبة
aud
والمطالبات الأخرى المتعلقة بالصلاحيات لتأمين طلب API. - كل رمز وصول يتوافق مع مورد واحد. إذا كان لديك موارد API متعددة مسجلة تحت URIs مختلفة، اطلب رموز وصول مميزة لكل منها.
🤔 ولكن ماذا لو لم يحدد العميل المورد عند طلب رمز الوصول؟
رمز الوصول المعتم
في حالة Logto، إذا لم يتم تحديد مؤشر الموارد عند طلب رمز الوصول، يفترض خادم التفويض أنه مخصص لنقطة النهاية /userinfo
لـ OIDC، وبالتالي سيتم إصدار رمز وصول معتم يمكن استخدامه في وقت لاحق من قبل العميل لطلب معلومات الملف الشخصي مثل معرف المستخدم، الاسم، البريد الإلكتروني، الخ، من نقطة النهاية userinfo لـ OIDC.
في أي SDK لـ Logto، يمكنك الحصول على مثل هذا الرمز إذا قمت باستدعاء getAccessToken()
أو طلب مباشرة نقطة النهاية للرمز OIDC دون تحديد معلمة resource
.
يرجى ملاحظة أن هذا الرمز المعتم غير مناسب لطلبات موارد API الخاصة بك، لأنه لا يوجد طريقة للتحقق منه بدون طلب خادم OIDC.
في المجمل
تحدد موارد OIDC بيانات أو خدمات محددة يريد تطبيق العميل الوصول إليها نيابة عن المستخدم، مع قيام رموز الوصول JWT بتوفير وسيلة آمنة لهذا الوصول. تتماشى مطالبة "aud" في رموز الوصول JWT مع مؤشر المورد، مما يساعد الخوادم في التحقق من الصلاحيات عند طلبات العميل.
في Logto، رمز الوصول المعتم مخصص فقط لجلب معلومات الملف الشخصي من نقطة النهاية userinfo لـ OIDC، بينما يمكن للعملاء طلب رموز وصول متعددة، كل منها مخصص لمورد محدد.
نأمل أن تقوم هذه المقالة بتوضيح أي شكوك وتربط النقاط لك. لا تتردد في إخبارنا بآرائك.