back

Knowledge Centre

فهم OAuth البسيط في Drupal: المصادقة للتطبيقات المنفصلة

| 08.11.2018

فهم OAuth البسيط في Drupal: المصادقة للتطبيقات المنفصلة

ما هو Simple OAuth؟


Simple OAuth هو وحدة Drupal التي توفر قدرات المصادقة للتطبيقات المنفصلة. ينفذ المصادقة القائمة على الرموز، مما يتيح للمستخدمين الوصول بأمان إلى التطبيق الخاص بك من خلال الرموز المميزة للوصول بدلاً من بيانات الدخول التقليدية.

سير عملية المصادقة القائمة على الرموز

تتبع عملية المصادقة نظامًا هرميًا للرموز:

  • رمز الوصول: هو بيانات الاعتماد الأساسية للمصادقة، يتم إنشاؤها كتجزئة SHA-256 فريدة من نوعها
  • رمز التجديد: يُستخدم لإنشاء رموز وصول جديدة عند انتهاء صلاحيتها
  • المصادقة الأساسية: مطلوبة عندما تنتهي صلاحية كل من رموز الوصول والتجديد

فهم رموز الوصول

رموز الوصول هي رموز الويب JSON (JWT) التي تحتوي على مكونين رئيسيين:

المطالبات
تحتفظ المطالبات بمعلومات هوية المستخدم الأساسية التي يحتاجها التطبيق العميل. بشكل افتراضي، يتضمن Simple OAuth مطالبتين:

  • `mail`: عنوان البريد الإلكتروني للمستخدم
  • `username`: اسم حساب المستخدم

النطاقات
تمثل النطاقات أدوار المستخدمين داخل التطبيق الخاص بك. وهي تحدد الإجراءات التي يمكن للمستخدم أن يقوم بها. بعض النقاط المهمة حول النطاقات:

  • يجب تحديد الأدوار المتعددة بفصل المسافات
  • إذا لم يتم تعريف نطاق، فإن الدور 'المصادق' يصبح الافتراضي
  • الرمز النهائي يتضمن كلاً من النطاقات المطلوبة وأي أدوار إضافية محددة في معرف العميل

توسيع المطالبات برموز الوصول

لإضافة مطالبات مخصصة تتجاوز الافتراضية `mail` و `username`، تحتاج إلى توسيع فئة `AccessTokenEntity`. إليك كيف:

class MyAccessTokenEntity extends AccessTokenEntity {
   public function convertToJWT(CryptKey $privateKey) {
       $private_claims = [];
       \Drupal::moduleHandler()
           ->alter('simple_oauth_private_claims', $private_claims, $this);
       if (!is_array($private_claims)) {
           $message = 'An implementation of hook_simple_oauth_private_claims_alter '
               . 'returns an invalid $private_claims value. $private_claims '
               . 'must be an array.';
           throw new \InvalidArgumentException($message);
       }
       $builder = (new Builder())
           ->setAudience($this->getClient()->getIdentifier())
           ->setId($this->getIdentifier(), TRUE)
           ->setIssuedAt(time())
           ->setNotBefore(time())
           ->setExpiration($this->getExpiryDateTime()->getTimestamp())
           ->setSubject($this->getUserIdentifier())
           ->set('scopes', $this->getScopes());
       // Add custom claims here
       // Example: $builder->set('user_picture', ...);
       foreach ($private_claims as $claim_name => $value) {
           $builder->set($claim_name, $value);
       }
       $key = new Key($privateKey->getKeyPath(), $privateKey->getPassPhrase());
       $token = $builder->sign(new Sha256(), $key)->getToken();
       return $token;
   }
}

تنفيذ كيان الرمز المخصص

لاستخدام كيان الرمز المخصص الخاص بك، ستحتاج إلى تسجيله مع حاوية الخدمة Drupal:

class MyServiceProvider extends ServiceProviderBase implements ServiceProviderInterface {
   public function alter(ContainerBuilder $container) {
       $definition = $container->getDefinition('simple_oauth.repositories.access_token');
       $definition->setClass('Drupal\my_module\Repositories\MyAccessTokenRepository');
   }
}

أفضل الممارسات

  1. دائمًا قم بالتحقق من صحة المطالبات الخاصة قبل المعالجة
  2. خذ في الاعتبار أوقات انتهاء صلاحية الرمز بعناية لحالة الاستخدام الخاصة بك
  3. قم بتنفيذ معالجة الأخطاء المناسبة لإنشاء الرمز والتحقق منه
  4. قم بتوثيق أي مطالبات مخصصة تمت إضافتها إلى النظام
  5. راقب استخدام الرمز وقم بتنفيذ تحديد النسبة إذا كان ذلك ضروريًا

تواصل معنا إذا كنت بحاجة إلى أي مساعدة.

I'm sorry, but I can't provide the translation you're asking for. As a text-based AI, I'm unable to process or translate images or any content within them.
  • المعرفة
    مركز المعرفة
    داخل عقل الذكاء الصناعي
  • المعرفة
    مركز المعرفة
    تنعيم LLaMA لإعادة إنشاء أسلوب إمينيسكو الأدبي
  • المعرفة
    مركز المعرفة
    تبدأ عهدًا جديدًا: إطلاق نظام إدارة المحتوى دروبال 1.0