مصادقة المستخدم

تستخدم بروتوكولات مصادقة الويب ميزات HTTP، بينما يتم تشغيل تطبيقات Chrome داخل حاوية التطبيق. فلن يتم تحميلها عبر HTTP ولا يمكنها إجراء عمليات إعادة توجيه أو تعيين ملفات تعريف الارتباط.

استخدام Chrome Identity API لمصادقة المستخدمين: getAuthToken للمستخدمين الذين سجّلوا الدخول حساباتهم على Google وlaunchWebAuthFlow للمستخدمين الذين سجّلوا الدخول إلى حساب غير تابع لـ Google إذا كان خادم خاص به لمصادقة المستخدمين، فستحتاج إلى استخدام خادمه الخاص.

آلية العمل

يمتلك مستخدمو تطبيقات Chrome حساب Google مرتبطًا بملفهم الشخصي. يمكن للتطبيقات الحصول على رموز OAuth2 المميزة لهؤلاء المستخدمين باستخدام واجهة برمجة تطبيقات getAuthToken.

على التطبيقات التي تريد إجراء مصادقة من خلال موفِّري هوية غير تابعين لشركة Google الاتصال بـ launchWebAuthFlow تستخدم هذه الطريقة نافذة منبثقة في المتصفّح لعرض صفحات موفِّر الخدمة واللقطات. تعيد التوجيه إلى أنماط عنوان URL المحددة. يتم تمرير عناوين URL لإعادة التوجيه إلى التطبيق ويستخرج التطبيق الرمز المميز من عنوان URL.

مصادقة حساب Google

في ما يلي الخطوات الخمس التي يجب إكمالها:

  1. يُرجى إضافة أذونات إلى ملف البيان وتحميل تطبيقك.
  2. انسخ المفتاح في manifest.json المثبَّت إلى ملف البيان المصدر، بحيث يكون رقم تعريف التطبيق ستظل ثابتة أثناء التطوير.
  3. احصل على معرِّف عميل OAuth2 لتطبيق Chrome.
  4. عدِّل ملف البيان ليتضمن معرِّف العميل والنطاقات.
  5. احصل على الرمز المميز للمصادقة.

إضافة أذونات وتحميل التطبيق

يجب التأكد من توفُّر إذن تحديد الهوية في بيان التطبيق. يمكنك بعد ذلك تحميل تطبيقك إلى صفحة إدارة التطبيقات والإضافات (راجِع نشر).

"permissions": [
  "identity"
]

نسخ المفتاح إلى ملف البيان

عند تسجيل تطبيقك في وحدة تحكم OAuth في Google، ستقدم عنوان URL الخاص رقم التعريف الذي سيتم التحقّق منه أثناء طلبات الرموز المميّزة لذلك من المهم أن يكون لديك قائمة معرّف التطبيق أثناء التطوير.

للحفاظ على رقم تعريف التطبيق ثابتًا، عليك نسخ المفتاح في "manifest.json" المثبَّت إلى: بيان المصدر. إنها ليست المهمة الأكثر رشاقة، ولكن إليك كيف تعمل:

  1. انتقِل إلى دليل بيانات المستخدمين. مثال على أجهزة MacO: ~/Library/Application\ Support/Google/Chrome/Default/Extensions
  2. إدراج التطبيقات والإضافات المثبَّتة ومطابقة رقم تعريف التطبيق على التطبيقات والإضافات إدارة المشروعات بالمعرّف ذاته هنا.
  3. انتقِل إلى دليل التطبيقات المثبَّت (سيكون هذا إصدارًا ضمن رقم تعريف التطبيق). فتح التطبيق المثبّت manifest.json (يُعدّ Pico طريقة سريعة لفتح الملف).
  4. انسخ "المفتاح" في ملف manifest.json المثبَّت ولصقه في بيان المصدر للتطبيق الملف.

الحصول على معرِّف عميل OAuth2

عليك تسجيل تطبيقك في وحدة تحكم Google APIs للحصول على معرِّف العميل:

  1. سجِّل الدخول إلى Google APIs Console باستخدام حساب Google نفسه المُستخدَم لتحميل تطبيقك إليه. سوق Chrome الإلكتروني.
  2. أنشئ مشروعًا جديدًا من خلال توسيع القائمة المنسدلة في أعلى اليمين وتحديد عنصر القائمة إنشاء....
  3. بعد إنشاء المحتوى وتسميته، انتقِل إلى "الخدمات". عنصر قائمة التنقل وتشغيل أي من عناصر الخدمات التي يحتاجها تطبيقك.
  4. الانتقال إلى "الوصول إلى واجهة برمجة التطبيقات" عنصر قائمة التنقل والنقر على إنشاء عميل OAuth 2.0. الزر الأزرق المعرّف....
  5. أدخِل معلومات العلامة التجارية المطلوبة، ثم اختَر النوع التطبيق المُثبّت.
  6. اختَر تطبيق Chrome وأدخِل معرّف التطبيق (المعرّف نفسه المعروض في التطبيقات. صفحة إدارة الإضافات).

تعديل ملف البيان باستخدام معرِّف عميل OAuth2 والنطاقات

يجب تعديل ملف البيان الخاص بك لتضمين معرّف العميل والنطاقات. إليك نموذج "oauth2" حيث نموذج gdrive:

"oauth2": {
    "client_id": "665859454684.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/drive"
    ]
  }

الحصول على رموز الدخول

يمكنك الآن الحصول على رمز المصادقة المميز من خلال طلب identity.getAuthToken.

chrome.identity.getAuthToken({ 'interactive': true }, function(token) {
  // Use the token.
});

تفاعل المستخدم

عند الاتصال بـ getAuthToken، يمكنك تمرير علامة ('interactive': true في المثال أعلاه) لتوضيح ما إذا كنت تريد استدعاء واجهة برمجة التطبيقات في الوضع التفاعلي أو الوضع الصامت. إذا استدعيت واجهة برمجة التطبيقات في وضع التفاعل، تظهر للمستخدم واجهة مستخدم لتسجيل الدخول و/أو صفحة الموافقة عند الضرورة، على النحو الموضّح في لقطة الشاشة أدناه:

لقطة شاشة تعرض واجهة المستخدم عندما يستخدم أحد التطبيقات Identity API لمصادقة حساب Google.

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

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

التخزين المؤقت

يحتوي Chrome على ذاكرة تخزين مؤقت لرموز الدخول، لذا يمكنك طلب الرقم getAuthToken في أي وقت. استخدام رمز مميز. تتعامل ذاكرة التخزين المؤقت مع تاريخ انتهاء صلاحية الرمز المميّز تلقائيًا.

يمكنك الاطّلاع على الحالة الحالية لذاكرة التخزين المؤقت للرمز المميّز على chrome://identity-internals.

هناك بعض الحالات، مثلاً عندما يغيّر المستخدم كلمة مروره عندما يستخدم رموز دخول غير منتهية الصلاحية عن العمل. ستبدأ طلبات البيانات من واجهة برمجة التطبيقات التي تستخدم الرمز المميّز في الظهور برمز حالة HTTP 401. في حال حذف عند اكتشاف حدوث ذلك، يمكنك إزالة الرمز المميز غير الصالح من ذاكرة التخزين المؤقت في Chrome من خلال identity.removeCachedAuthToken.

مثال على استخدام removeCachedAuthToken:

// callback = function (error, httpStatus, responseText);
function authenticatedXhr(method, url, callback) {
  var retry = true;
  function getTokenAndXhr() {
    chrome.identity.getAuthToken({/* details */},
                                 function (access_token) {
      if (chrome.runtime.lastError) {
        callback(chrome.runtime.lastError);
        return;
      }

      var xhr = new XMLHttpRequest();
      xhr.open(method, url);
      xhr.setRequestHeader('Authorization',
                           'Bearer ' + access_token);

      xhr.onload = function () {
        if (this.status === 401 && retry) {
          // This status may indicate that the cached
          // access token was invalid. Retry once with
          // a fresh token.
          retry = false;
          chrome.identity.removeCachedAuthToken(
              { 'token': access_token },
              getTokenAndXhr);
          return;
        }

        callback(null, this.status, this.responseText);
      }
    });
  }
}

مصادقة الحساب الذي لا يتبع Google

في ما يلي الخطوات الثلاث التي يجب إكمالها:

  1. التسجيل لدى مقدّم الخدمة
  2. أضِف أذونات لموارد موفّر الخدمة التي يمكن لتطبيقك الوصول إليها.
  3. احصل على الرمز المميز للمصادقة.

التسجيل لدى مقدّم الخدمة

وعليك تسجيل معرِّف عميل OAuth2 لدى موفّر الخدمة وإعداد معرِّف العميل كموقع إلكتروني. لإدخال عنوان URI لإعادة التوجيه أثناء التسجيل، استخدم عنوان URL للنموذج: https://<extension-id>.chromiumapp.org/<anything-here>

على سبيل المثال، إذا كان رقم تعريف التطبيق هو abcdefghijklmnopqrstuvwxyzabcdef وأردت أن يكون provider_cb لتمييز المسار باستخدام معرفات الموارد المنتظمة (URI) لإعادة التوجيه من موفّرين آخرين، عليك استخدام ما يلي: https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb

إضافة أذونات لموفّر الخدمة

لإرسال طلبات XHR من مصادر متعددة إلى نقاط نهاية واجهة برمجة التطبيقات لمقدّم الخدمة، عليك إضافة الأنماط في الأذونات:

"permissions": [
  ...
  "https://www.website-of-provider-with-user-photos.com/photos/*"
]

الحصول على الرمز المميّز

للحصول على الرمز المميّز:

chrome.identity.launchWebAuthFlow(
  {'url': '<url-to-do-auth>', 'interactive': true},
  function(redirect_url) { /* Extract token from redirect_url */ });

يمثّل <url-to-do-auth> كل ما هو مطلوب من عنوان URL للمصادقة على موفّر الخدمة من موقع إلكتروني. على سبيل المثال: لنفترض أنّك تُجري تدفق OAuth2 مع أحد موفّري الخدمات وسجّلت تطبيقك باستخدام معرِّف العميل 123456789012345 وتريد الوصول إلى صور المستخدم على الموقع الإلكتروني للمزود: https://www.website-of-provider-with-user-photos.com/dialog/oauth?client_id=123456789012345& redirect_uri=https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb&response_type=token&scope=user_photos

سيُجري موفِّر الخدمة عملية المصادقة، وسيعرض إذا لزم الأمر واجهة مستخدم لتسجيل الدخول و/أو الموافقة المستخدم. ستتم بعد ذلك إعادة التوجيه إلى https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb#authToken=<auth-token>

سيلتقط Chrome ذلك ويستدعي معاودة الاتصال بالتطبيق مع عنوان URL لإعادة التوجيه الكامل. التطبيق يجب استخراج الرمز المميز من عنوان URL.

الوضع التفاعلي في مقابل الوضع الصامت

عند الاتصال بـ launchWebAuthFlow، يمكنك تمرير علامة ('interactive': true في المثال أعلاه) للإشارة إلى ما إذا كنت تريد استدعاء واجهة برمجة التطبيقات في الوضع التفاعلي أو لا (يُعرف ذلك أيضًا باسم الوضع الصامت). في حال حذف عند استدعاء واجهة برمجة التطبيقات في الوضع التفاعلي، ستظهر للمستخدم واجهة المستخدم، إذا لزم الأمر، للحصول على الرمز المميز (تسجيل الدخول واجهة المستخدم و/أو واجهة المستخدم الخاصة بالموافقة أو أي واجهة مستخدم خاصة بمقدم الخدمة).

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

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