العربية
  • JWT مخصص
  • مطالبات JWT
  • التخويل
  • المصادقة
  • OAuth 2.0
  • Logto

إضافة مطالبات مخصصة لـ JWT مع Logto لتعزيز التحقق

في هذه المقالة، سنقدم كيفية استخدام ميزة مطالبات JWT المخصصة في Logto لتحسين مرونة التفويض وأداء مزود الخدمة من خلال مثال واقعي.

Darcy Ye
Darcy Ye
Developer

في المقالات السابقة، ذكرنا أن المزيد والمزيد من الأنظمة تستخدم رموز وصول JWT لعملية مصادقة المستخدم والولوج إلى النظام. أحد الأسباب المهمة لذلك هو أن JWT يمكن أن يحتوي على بعض المعلومات المفيدة، مثل أدوار وصلاحيات المستخدم. يمكن أن تساعد هذه المعلومات في تبادل معلومات هوية المستخدم بين الخادم والعميل، وبالتالي تحقيق مصادقة المستخدم والولوج إلى النظام.

عادةً، يتم تحديد المعلومات الموجودة في JWT بواسطة خادم المصادقة. وفقًا لبروتوكول OAuth 2.0، يحتوي JWT عادةً على حقول مثل sub (الموضوع)، aud (الجمهور)، وexp (تاريخ انتهاء الصلاحية)، والتي يطلق عليها عادةً المطالبات. يمكن أن تساعد هذه المطالبات في التحقق من صلاحية رمز الوصول.

ومع ذلك، هناك العديد من السيناريوهات حيث يتم استخدام JWT للتحقق، وقد لا تلبي المطالبات الشائعة احتياجات المستخدمين. غالبًا ما يفكر الأشخاص في أنه بما أن JWT يمكن أن تحتوي على بعض المعلومات، فهل يمكننا إضافة بعض المعلومات إليها لجعل التفويض أسهل؟

الإجابة هي نعم، يمكننا إضافة مطالبات مخصصة لـ JWT، مثل نطاق المستخدم الحالي ومستوى الاشتراك. بهذه الطريقة، يمكننا تحويل معلومات هوية المستخدم بين العميل والخادم (تشير “الخادم” هنا إلى الخادم الذي يوفر خدمات مختلفة، المعروف أيضًا بمزود الخدمة)، لتحقيق مصادقة المستخدم والتحكم في الوصول.

للاطلاع على مطالبات JWT القياسية، يرجى الرجوع إلى RFC7519. كحل للهوية يدعم كل من المصادقة والتفويض، قام Logto بتمديد مطالبات الموارد والنطاق لدعم RBAC القياسي. على الرغم من أن تنفيذ RBAC الخاص بـ Logto قياسي، إلا أنه ليس بسيطًا ومرنًا بما يكفي لتغطية جميع حالات الاستخدام.

بناءً على ذلك، أطلق Logto ميزة جديدة لتخصيص مطالبات JWT، مما يسمح للمستخدمين بتخصيص مطالبات JWT إضافية، بحيث يمكن تحقيق مصادقة المستخدم والتحكم في الوصول بشكل أكثر مرونة.

كيف تعمل مطالبات JWT المخصصة في Logto؟

يمكنك الوصول إلى صفحة قائمة الـ JWT المخصصة بالنقر فوق زر "مزايدات JWT" في الشريط الجانبي.

custom-jwt-listing-page

لنبدأ بإضافة المطالبات المخصصة للمستخدمين النهائيين.

في المحرر على اليسار، يمكنك تخصيص وظيفة getCustomJwtClaims الخاصة بك. تحتوي هذه الطريقة على ثلاثة مدخلات: token، data، و envVariables.

  • token هو حمولة وصول الرمز الخام التي يتم الحصول عليها بناءً على بيانات اعتماد المستخدم النهائي الحالي وتكوين نظامك، ومعلومات الوصول ذات الصلة بالمستخدم في Logto
  • data هي جميع المعلومات عن المستخدم في Logto، بما في ذلك جميع أدوار المستخدم، هويات تسجيل الدخول الاجتماعي، هويات تسجيل الدخول الموحَّد (SSO)، عضويات المؤسسات،إلخ
  • envVariables هي متغيرات البيئة التي قمت بتكوينها في Logto لسيناريو استخدام رمز الوصول للمستخدم النهائي الحالي، مثل المفتاح (المفاتيح) لواجهة برمجة التطبيق المطلوبة، إلخ
details-page-user-data

يمكن توسيع البطاقات الموجودة على اليمين لعرض مقدمة المعلمات المقابلة، ويمكنك أيضًا إعداد متغيرات البيئة للسيناريو الحالي هنا.

details-page-user-test

بعد قراءة مقدّمات جميع البطاقات على اليمين، يمكنك التبديل إلى وضع الاختبار، حيث يمكنك تحرير بيانات الاختبار واستخدام بيانات الاختبار المحررة للتحقق مما إذا كان سلوك النص الذي كتبته في محرر الشفرات على اليسار يتفق مع توقعاتك.

هذا هو رسم تخطيطي متسلسل يوضح عملية تنفيذ وظيفة getCustomJwtClaims عندما يطلق المستخدم النهائي طلب مصادقة إلى Logto ويحصل في النهاية على رمز الوصول بتنسيق JWT المقدم من Logto.

إذا لم يتم تمكين ميزة الـ JWT المخصصة، سيتم تخطي الخطوة 3 في الرسم وسيتم تنفيذ الخطوة 4 مباشرة بعد انتهاء الخطوة 2. في هذا الوقت سيقوم Logto باعتبار القيمة المرتجعة من getCustomJwtClaims ككائن فارغ، ثم يستمر في المرور بخطوات لاحقة.

عزز التفويض الخاص بك باستخدام مطالبات JWT المخصصة: مثال عملي

في القسم السابق، قدمنا مبدأ عمل Logto المخصص لـ JWT. في هذا الجزء، سنوضح لك كيفية استخدام مطالبات الحصول على JWT المخصصة لـ Logto لتحسين مرونة التفويض وأداء مزود الخدمة من خلال مثال واقعي.

إعداد السيناريو

طورت فريق جون تطبيق مساعد الذكاء الاصطناعي الذي يسمح للمستخدمين بالتحدث مع روبوتات الذكاء الصناعي للحصول على خدمات مختلفة.

رافقت الخدمات الصغيرة لأولويات مزايا الخادم الفرق العثور على معدل استخدام لغة التنصيص الخدمة إلى مع آخر هذه التصحيحة السفارة.

نقدم هنا منطق Logto للتحقق من رموز الوصول JWT من جانب واجهة برمجة التطبيقات. يمكن العثور على تنفيذ الشفرة الكامل في مستودع GitHub:

يمكنك الرجوع إلى منطق واجهة برمجة التطبيقات لـ Logto للتحقق من رموز الوصول وتخصيصه وفقًا لمنطق عملك الخاص. على سبيل المثال، بالنسبة لسيناريو تطبيق مساعد الذكاء الاصطناعي الموضح هنا، يمكنك إضافة منطق تحقق للمطالبات المخصصة مثل roles، balance، numOfCallsToday، isPaidUser وisPremiumUser في وظيفة verifyBearerTokenFromRequest.

المثال أعلاه مخصص للسيناريو حيث يؤثر على تسجيل المستخدم النهائي والحصول على رمز الوصول لـ JWT. إذا كان حالة الاستخدام لديك هي تواصل آلة بآلة (M2M)، يمكنك أيضًا تكوين مطالبات JWT مخصصة للتطبيقات M2M بشكل منفصل.

لن يؤثر تكوين JWT مخصص للمستخدمين على نتيجة التطبيقات M2M في الحصول على رموز وصول، والعكس صحيح.

نظرًا لعمومية اتصالات M2M، لا يوفر Logto حاليًا وظيفة طريقة getCustomJwtClaims لتطبيقات M2M لقبول البيانات الداخلية من Logto. في الجوانب الأخرى، يكون أسلوب تكوين JWT المخصص لتطبيقات M2M هو نفسه كما في تطبيقات المستخدمين. لن تشرح هذه المقالة ذلك بالتفصيل. يمكنك استخدام وظيفة JWT المخصصة لـ Logto للبدء.

لماذا استخدام مطالبات JWT المخصصة؟

لقد قدمنا سيناريو تطبيق مساعد الذكاء الاصطناعي لجون وكيفية استخدام ميزة JWT المخصصة لـ Logto لتحقيق التحقق من التفويض بشكل أكثر مرونة. خلال هذه العملية، يمكننا رؤية مزايا ميزة JWT المخصصة:

  1. بدون ميزة JWT المخصصة، تحتاج المستخدمين لطلب واجهة API خارجية (مثل ما تفعله في getCustomJwtClaims) في كل مرة يتحققون فيها من الأذونات. بالنسبة لمزود الخدمة الذي يقدم هذه الواجهة، قد يزيد ذلك الحمل الإضافي. مع ميزة JWT المخصصة، يمكن وضع هذه المعلومات مباشرة في JWT، مما يقلل من الدعوات المتكررة لواجهة API الخارجية.
  2. بالنسبة لمزودي الخدمة، يمكن لميزة JWT المخصصة مساعدتهم على التحقق من أذونات المستخدمين بسرعة أكبر، خاصة عند الاتصال المتكرر بالواجهة من خلال العميل، مما يحسن من أداء الخدمة.
  3. يمكن لميزة JWT المخصصة مساعدتك على تنفيذ معلومات تحميل إضافية يحتاجها العمل بسرعة، ويمكن تمرير المعلومات بين العميل ومزود الخدمة بطريقة آمنة لأن JWT مستقل ويمكن تشفيره بحيث يصعب تزويره.

في الوقت نفسه، نظرًا لأن getCustomJwtClaims يتم تنفيذه في كل مرة يحتاج فيها المستخدم Logto لإصدار رمز وصول، فمن الضروري تجنب تنفيذ منطق معقد للغاية وطلبات واجهة API خارجية عالية عرض النطاق الترددي. خلاف ذلك، قد يستغرق الأمر وقتًا طويلًا جدًا لكي ينتظر المستخدمون النهائيون نتيجة getCustomJwtClaims خلال عملية تسجيل الدخول. إذا كان getCustomJwtClaims الخاص بك يعيد كائن فارغ، نوصي بشدة بأن تحذف هذا البند مؤقتًا حتى تحتاج لاستخدامه فعليًا.

الخاتمة

في هذه المقالة، قام Logto بتمديد رمز الوصول الأساسي لـ JWT وامتداد وظيفة مطالبات JWT الإضافية للسماح للمستخدمين بوضع معلومات المستخدم النهائي الإضافية في رمز الوصول لـ JWT وفقا لاحتياجاتهم التجارية، بحيث يمكن التحقق بسرعة من أذونات المستخدم بعد تسجيل الدخول.

نقدم سيناريو تطبيق مساعد الذكاء الاصطناعي لجون ونوضح كيفية استخدام ميزة JWT المخصصة لـ Logto لتحقيق التحقق من التفويض بشكل أكثر مرونة. نشير أيضًا إلى بعض النقاط الأساسية لاستخدام JWT المخصص. باستخدام سيناريوهات الأعمال الفعلية، يمكن للمستخدمين وضع مجموعة متنوعة من المعلومات المرتبطة بالمستخدم في رمز الوصول لـ JWT وفقًا لاحتياجات أعمالهم، حتى يتمكن مزود الخدمة من التحقق بسرعة من أذونات المستخدمين.