المصادقة والتفويض كمستخدم Google Chat

يوضّح هذا الدليل كيفية استخدام OAuth 2.0 مع بيانات اعتماد Google للمستخدمين للوصول إلى Chat API. تؤدي المصادقة والتفويض باستخدام بيانات اعتماد المستخدم إلى السماح لتطبيقات Chat بالوصول إلى بيانات المستخدمين وتنفيذ العمليات نيابةً عن المستخدم الذي تمت مصادقته. من خلال إجراء المصادقة نيابةً عن المستخدم، يحصل التطبيق على الأذونات نفسها التي يحصل عليها هذا المستخدم، ويمكنه تنفيذ إجراءات كما لو تم تنفيذها من قِبل هذا المستخدم.

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

  • إنشاء مساحات Chat
  • إضافة مستخدمين إلى مساحات Chat والمحادثات الجماعية
  • يمكنك العمل مع بيانات المستخدمين في واجهات برمجة تطبيقات Workspace الأخرى، مثل ما يلي:

عندما ينفِّذ تطبيق إجراءً باستخدام مصادقة المستخدم (مثل إنشاء مساحة)، يعرض Google Chat رسالة إحالة تخبر المستخدمين باسم التطبيق الذي نفّذ الإجراء للمستخدم الذي سمح له بذلك.

ينشئ تطبيق Google Chat مساحة للمستخدم.
الشكل 1. رسالة الإحالة التي يعرضها Google Chat عندما ينشئ تطبيق Chat مساحة نيابةً عن مستخدم.

لمزيد من المعلومات حول الحالات التي تتطلّب فيها التطبيقات في Chat المصادقة ونوع المصادقة الذي يجب استخدامه، يمكنك الاطّلاع على المقالة أنواع المصادقة المطلوبة في النظرة العامة على المصادقة والترخيص في Chat API.

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

المتطلبات الأساسية

لتشغيل المثال في هذا الدليل، تحتاج إلى المتطلبات الأساسية التالية:

إضافةً إلى ذلك، تحتاج إلى المتطلبات الأساسية التالية الخاصة باللغة:

Java

  • JDK 1.7 أو أكبر
  • أداة إدارة الحِزم في Maven
  • مشروع Maven مهيأ. لتهيئة مشروع جديد، شغل الأمر التالي في واجهة سطر الأوامر:

    mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    

Python

  • Python 3.6 أو أحدث
  • إنّ أداة إدارة الحِزم pip

Node.js

  • Node.js
  • أداة إدارة الحِزم npm
  • مشروع Node.js مهيأ. لتهيئة مشروع جديد، قم بإنشاء والتبديل إلى مجلد جديد، ثم قم بتشغيل الأمر التالي في واجهة سطر الأوامر لديك:

    npm init
    

برمجة تطبيقات

الخطوة 1: ضبط شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth، وتحديد النطاقات، وتسجيل تطبيقك

عند استخدام OAuth 2.0 للتفويض، تعرض Google شاشة طلب الموافقة للمستخدم، تتضمن ملخصًا لمشروعك وسياساته ونطاقات الترخيص المطلوبة. تحدّد ضبط شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth في تطبيقك ما تعرضه Google للمستخدمين ومراجعي التطبيقات، كما تُسجِّل تطبيقك حتى تتمكّن من نشره لاحقًا.

تتطلّب جميع التطبيقات التي تستخدم OAuth 2.0 ضبط شاشة طلب الموافقة، ولكن عليك فقط إدراج نطاقات التطبيقات التي يستخدمها الأشخاص من خارج مؤسستك على Google Workspace.

  1. في Google Cloud Console، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > شاشة موافقة OAuth.

    الانتقال إلى شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth

  2. اختَر نوع المستخدِم لتطبيقك، ثم انقر على إنشاء.

  3. املأ نموذج تسجيل التطبيق، ثم انقر على حفظ ومتابعة.

  4. انقر على إضافة نطاقات أو إزالتها. أضِف نطاقات التفويض المطلوبة في تطبيقك وتحقَّق منها، وانقر على تحديث، ثم انقر على حفظ ومتابعة.

  5. مراجعة ملخص تسجيل التطبيق انقر على تعديل لإجراء تغييرات، أو انقر على الرجوع إلى لوحة البيانات.

الخطوة 2: إنشاء بيانات اعتماد معرِّف عميل OAuth في Google Cloud Console

للمصادقة بصفتك مستخدمًا نهائيًا والوصول إلى بيانات المستخدم في تطبيقك، عليك إنشاء معرِّف عميل OAuth 2.0 واحد أو أكثر. يتم استخدام معرّف العميل لتحديد تطبيق واحد لخوادم OAuth من Google. إذا كان تطبيقك يعمل على منصات متعددة، مثل Android وiOS والويب، عليك إنشاء معرّف عميل منفصل لكل نظام أساسي.

إنشاء بيانات اعتماد معرِّف عميل OAuth

اختَر نوع التطبيق للحصول على تعليمات محدَّدة حول كيفية إنشاء معرِّف عميل OAuth:

تطبيق ويب

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > تطبيق الويب.
  4. في حقل الاسم، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google Cloud Console.
  5. أضِف معرّفات الموارد المنتظمة (URI) المعتمَدة والمرتبطة بتطبيقك:
    • التطبيقات من جهة العميل (JavaScript): ضمن مصادر JavaScript المسموح بها، انقر على إضافة معرّف الموارد المنتظم (URI). بعد ذلك، أدخِل معرّف الموارد المنتظم (URI) لاستخدامه مع طلبات المتصفّح. يحدد هذا النطاق النطاقات التي يمكن لتطبيقك من خلالها إرسال طلبات واجهة برمجة التطبيقات إلى خادم OAuth 2.0.
    • التطبيقات من جهة الخادم (Java وPython وغيرهما): ضمن معرِّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه، انقر على إضافة معرِّف الموارد المنتظم (URI). بعد ذلك، أدخِل معرّف الموارد المنتظم (URI) لنقطة النهاية الذي يمكن لخادم OAuth 2.0 إرسال ردود إليه.
  6. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل وسر العميل الجديد.

    سجِّل معرِّف العميل. لا يتم استخدام أسرار العملاء لتطبيقات الويب.

  7. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن معرِّفات عملاء OAuth 2.0.

Android

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > Android.
  4. في حقل "الاسم"، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google Cloud Console.
  5. في حقل "اسم الحزمة"، أدخِل اسم الحزمة من ملف AndroidManifest.xml.
  6. في حقل "الملف المرجعي لشهادة SHA-1"، أدخِل الملف المرجعي لشهادة SHA-1 الذي تم إنشاؤه.
  7. انقر على إنشاء. ستظهر شاشة إنشاء عميل OAuth، وتعرض معرّف العميل الجديد.
  8. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن "معرّفات عملاء OAuth 2.0".

iOS

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > iOS.
  4. في حقل "الاسم"، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google Cloud Console.
  5. في حقل "معرّف الحزمة"، أدخِل معرّف الحزمة كما هو وارد في ملف Info.plist الخاص بالتطبيق.
  6. اختياري: إذا ظهر تطبيقك في متجر Apple App Store، أدخِل رقم تعريف App Store.
  7. اختياري: في حقل "رقم تعريف الفريق"، أدخِل السلسلة الفريدة المكونة من 10 أحرف والتي أنشأتها Apple وتم تخصيصها لفريقك.
  8. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل وسر العميل الجديد.
  9. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن "معرّفات عملاء OAuth 2.0".

تطبيق Chrome

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > تطبيق Chrome.
  4. في حقل "الاسم"، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google Cloud Console.
  5. في حقل "معرّف التطبيق"، أدخِل سلسلة رقم التعريف الفريدة لتطبيقك والمؤلّفة من 32 حرفًا. يمكنك العثور على قيمة رقم التعريف هذه في عنوان URL لتطبيقك على "سوق Chrome الإلكتروني" وفي لوحة بيانات المطوّر في "سوق Chrome الإلكتروني".
  6. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل وسر العميل الجديد.
  7. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن "معرّفات عملاء OAuth 2.0".

تطبيق لأجهزة الكمبيوتر المكتبي

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > تطبيق الكمبيوتر المكتبي.
  4. في حقل الاسم، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google Cloud Console.
  5. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل وسر العميل الجديد.
  6. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن معرِّفات عملاء OAuth 2.0.

أجهزة التلفزيون وأجهزة الإدخال المحدود

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > أجهزة التلفزيون وأجهزة الإدخال المحدود.
  4. في حقل "الاسم"، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google Cloud Console.
  5. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل وسر العميل الجديد.
  6. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن "معرّفات عملاء OAuth 2.0".

Universal Windows Platform (منصة Windows العالمية)

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > Universal Windows Platform (UWP).
  4. في حقل "الاسم"، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google Cloud Console.
  5. في حقل "رقم تعريف المتجر"، أدخِل قيمة رقم تعريف المتجر الفريدة لتطبيقك والمؤلّفة من 12 حرفًا. يمكنك العثور على هذا المعرّف في عنوان URL لتطبيقك على Microsoft Store وفي مركز الشركاء.
  6. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل وسر العميل الجديد.
  7. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن "معرّفات عملاء OAuth 2.0".

تنزيل ملف JSON لسر العميل

ملف سر العميل هو تمثيل JSON لبيانات اعتماد معرِّف عميل OAuth التي يمكن لتطبيق Chat الرجوع إليها عند تقديم بيانات الاعتماد.

  1. في Google Cloud Console، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. ضمن معرِّفات عملاء OAuth 2.0، انقر على معرِّف العميل الذي أنشأته.

  3. انقر على Download JSON (تنزيل JSON).

  4. احفظ الملف باسم "client_secrets.json".

الخطوة 3: تثبيت مكتبة برامج Google والملحقات الأخرى

تثبيت مكتبة برامج Google والتبعيات الأخرى المطلوبة للمشروع.

Java

لإضافة مكتبات عملاء Google والتبعيات المطلوبة الأخرى إلى مشروع Maven، عدِّل الملف pom.xml في دليل مشروعك، وأضِف التبعيات التالية:

<dependencies>
  <!-- ... existing dependencies ... -->
  <dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-chat</artifactId>
    <version>v1-rev20230905-2.0.0</version>
  </dependency>
  <dependency>
    <groupId>com.google.auth</groupId>
    <artifactId>google-auth-library-oauth2-http</artifactId>
    <version>1.19.0</version>
  </dependency>
  <dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client-jetty</artifactId>
    <version>1.34.1</version>
  </dependency>
  <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.10.1</version>
  </dependency>
</dependencies>

Python

إذا لم تكن قد قمت بالفعل بتثبيت مكتبات عملاء Google للغة بايثون، فقم بتشغيل الأمر التالي في واجهة سطر الأوامر:

pip3 install --upgrade google-api-python-client google-auth-oauthlib

Node.js

لإضافة مكتبات عملاء Google والتبعيات المطلوبة الأخرى إلى مشروع Node.js الخاص بك، قم بالتبديل إلى دليل المشروع الخاص بك وقم بتشغيل الأمر التالي في واجهة سطر الأوامر لديك:

npm install "@googleapis/chat" open server-destroy

برمجة تطبيقات

يستخدم هذا النموذج خدمة الدردشة المتقدّمة لطلب بيانات من Google Chat API. لتشغيل الخدمة لمشروع "برمجة التطبيقات":

  1. على يمين الصفحة، انقر على أداة التعديل .
  2. على يمين الصفحة، بجانب الخدمات، انقر على إضافة خدمة .
  3. اختَر Google Chat API.
  4. في الإصدار، اختَر الإصدار 1.
  5. انقر على إضافة.

يمكنك استخدام أي لغة معتمَدة في مكتبات العملاء.

الخطوة 4: كتابة نص برمجي لاستدعاء Chat API

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

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

للمزيد من المعلومات عن عملية تفويض OAuth، يمكنك الاطّلاع على استخدام OAuth 2.0 للوصول إلى دليل Google APIs.

تستخدم عيّنات التعليمات البرمجية التالية في Java وPython وNode.js مكتبة عميل لتنفيذ مسار تفويض OAuth. يفتح خادم HTTP محليًا لتلقّي رمز التفويض مرة أخرى من خادم التفويض، والذي يستبدله بعد ذلك برمز دخول. في نموذج رمز برمجة التطبيقات، تتم معالجة تدفق التفويض هذا من خلال "برمجة تطبيقات Google".

بعد إكمال مسار المصادقة، تتم مصادقة النص البرمجي مع Chat API باستخدام رمز الدخول الخاص بالمستخدم، ثم ينشئ مساحة.

Java

  1. في دليل مشروعك، افتح الملف src/main/java/com/google/chat/app/authsample/App.java.
  2. استبدِل المحتوى في App.java بالرمز التالي:

    package com.google.chat.app.authsample;
    
    import com.google.api.client.auth.oauth2.Credential;
    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.chat.v1.HangoutsChat;
    import com.google.api.services.chat.v1.model.Space;
    
    import java.io.InputStreamReader;
    import java.util.Collection;
    import java.util.Collections;
    
    /**
     * Authenticates with Chat API via user credentials, then creates a Chat space.
     */
    public class App {
        // Application OAuth credentials.
        private static final String KEYS_RESOURCE_URI = "/client_secrets.json";
    
        // Define your app's authorization scopes.
        private static final Collection<String> SCOPES =
            Collections.singleton("https://www.googleapis.com/auth/chat.spaces.create");
    
        // Directory to store user credentials.
        private static final java.io.File DATA_STORE_DIR =
            new java.io.File(System.getProperty("user.home"), ".store/auth-sample-app");
    
        // Global instance of the JSON factory.
        private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
    
        // Global instance of the HTTP transport.
        private static HttpTransport httpTransport;
    
        // Global instance of the DataStoreFactory. The best practice is to make it a single
        // globally shared instance across your application.
        private static FileDataStoreFactory dataStoreFactory;
    
        public static void main( String[] args ) {
            try {
                // Run app.
                httpTransport = GoogleNetHttpTransport.newTrustedTransport();
                dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
                Credential userCredential = authorize();
                Space response = App.createChatSpace(userCredential);
                // Print details about the created space.
                System.out.println(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * Authorizes the installed application to access user's protected data.
         */
        private static Credential authorize() throws Exception {
            // Load client secrets.
            GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
                new InputStreamReader(App.class.getResourceAsStream("/client_secrets.json")));
            // Set up authorization code flow.
            GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(dataStoreFactory)
                .build();
            // Authorize.
            return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
        }
    
        /**
         * Creates a Chat space.
         */
        private static Space createChatSpace(Credential userCredential) throws Exception {
            // Build the Chat API client and authenticate with the user account.
            HangoutsChat chatService = new HangoutsChat.Builder(
                httpTransport, JSON_FACTORY, userCredential)
                .setApplicationName("auth-sample-app")
                .build();
    
            // Create a Chat space.
            Space space = new Space()
                // To create a named space, set spaceType to SPACE.
                .setSpaceType("SPACE")
                // The user-visible name of the space.
                .setDisplayName("API-made");
            return chatService.spaces().create(space).execute();
        }
    }
    
  3. أنشِئ دليلاً فرعيًا جديدًا باسم resources ضمن دليل مشروعك.

  4. انسخ الملف client_secrets.json إلى الدليل الفرعي resources.

  5. لضبط Maven لتضمين ملف أسرار العميل في حزمة المشروع، يمكنك تعديل الملف pom.xml في دليل مشروعك وإضافة الإعدادات التالية إلى قسم <build>:

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  6. لإعداد Maven لتضمين التبعيات في حزمة المشروع وتنفيذ الفئة الرئيسية لتطبيقك، يمكنك تعديل الملف pom.xml في دليل المشروع وإضافة الإعدادات التالية إلى القسم <plugins>:

    <plugins>
      <!-- ... existing configurations ... -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.google.chat.app.authsample.App</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
    

Python

  1. احفظ الرمز التالي في ملف باسم chat_space_create_named.py في الدليل نفسه الذي يحتوي على client_secrets.json:

    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"]
    
    def main():
      '''
      Authenticates with Chat API via user credentials,
      then creates a Chat space.
      '''
    
      flow = InstalledAppFlow.from_client_secrets_file(
                        'client_secrets.json', SCOPES)
      creds = flow.run_local_server()
    
      # Build a service endpoint for Chat API.
      service = build('chat', 'v1', credentials=creds)
    
      # Use the service endpoint to call Chat API.
      result = service.spaces().create(
    
        # Details about the space to create.
        body = {
    
          # To create a named space, set spaceType to SPACE.
          'spaceType': 'SPACE',
    
          # The user-visible name of the space.
          'displayName': 'API-made'
    
        }
    
      ).execute()
    
      # Prints details about the created space.
      print(result)
    
    if __name__ == '__main__':
      main()
    

Node.js

  1. احفظ الرمز التالي في ملف باسم chat_space_create_named.js في الدليل نفسه الذي يحتوي على مشروع Node.js وclient_secrets.json:

    const fs = require('fs');
    const path = require('path');
    const http = require('http');
    const url = require('url');
    const destroyer = require('server-destroy');
    
    const chat = require('@googleapis/chat');
    
    // Application OAuth credentials.
    const keys = require('./client_secrets.json').installed;
    
    // Define your app's authorization scopes.
    // When modifying these scopes, delete the file token.json, if it exists.
    const scopes = ["https://www.googleapis.com/auth/chat.spaces.create"];
    
    // Create a new OAuth2 client with the configured keys.
    const oauth2Client = new chat.auth.OAuth2(
      keys.client_id,
      keys.client_secret,
      'http://localhost:3000'
    );
    
    /**
     * Opens an HTTP server to accept the OAuth callback.
     * In this simple example, the only request to our webserver is to /?code=<code>.
     */
    async function authenticate(scopes) {
      const opn = (await import('open')).default;
    
      return new Promise((resolve, reject) => {
        // Generate the URL for authorization.
        const authorizeUrl = oauth2Client.generateAuthUrl({
          access_type: 'offline',
          scope: scopes.join(' '),
        });
        // Start the HTTP server to listen for the callback.
        const server = http
          .createServer(async (req, res) => {
            try {
              const qs = new url.URL(req.url, 'http://localhost:3000').searchParams;
              res.end('Authentication successful! Please return to the console.');
              server.destroy();
              const { tokens } = await oauth2Client.getToken(qs.get('code'));
              oauth2Client.credentials = tokens;
              resolve(oauth2Client);
            } catch (e) {
              reject(e);
            }
          })
          .listen(3000, () => {
            // Open the browser to the authorize URL to start the workflow.
            opn(authorizeUrl, { wait: false }).then(cp => cp.unref());
          });
        destroyer(server);
      });
    }
    
    /**
     * Authenticates with Chat API via user credentials, then creates a Chat space.
     */
    async function createSpace() {
      // Create the Chat API client and authenticate with the authorized user.
      const chatClient = await chat.chat({
        version: 'v1',
        auth: oauth2Client
      });
    
      // Call the Chat API to create a space.
      const result = await chatClient.spaces.create({
    
        // Details about the space to create.
        requestBody: {
    
          // To create a named space, set spaceType to SPACE.
          'spaceType': 'SPACE',
    
          // The user-visible name of the space.
          'displayName': 'API-made'
    
        }
    
      });
      return result;
    }
    
    // Authenticate the user, execute the function,
    // then print details about the created space.
    authenticate(scopes)
      .then(createSpace)
      .then(console.log);
    

برمجة تطبيقات

  1. في محرِّر "برمجة تطبيقات Google"، عدِّل الملف appsscript.json وأضِف نطاق OAuth اللازم لاستدعاء واجهة برمجة التطبيقات:

      "oauthScopes": [
        "https://www.googleapis.com/auth/chat.spaces.create"
      ]
    
  2. احفظ الرمز التالي في ملف باسم ChatSpaceCreateNamed.gs في مشروع برمجة التطبيقات:

    /**
     * Authenticates with Chat API via user credentials, then creates a
     * Chat space.
     */
    function createSpace() {
      try {
        // Details about the space to create.
        // To create a named space, set spaceType to SPACE.
        // The user-visible name of the space is displayName.
        const space = {'displayName': 'API-made', 'spaceType': 'SPACE'};
    
        // Call Chat API with user credentials to create the space.
        const result = Chat.Spaces.create(space);
    
        // Log details about the created space.
        console.log(result);
      } catch (err) {
        // TODO (developer) - Handle exception
        console.log('Failed to create space with error %s', err.message);
      }
    }
    

الخطوة 5: تشغيل نموذج النص البرمجي

لتشغيل المثال، من سطر الأوامر، انتقل إلى الدليل الذي يحتوي على ملفات مشروعك، ثم نفذ الأمر التالي:

Java

mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar

Python

python3 chat_space_create_named.py

Node.js

node chat_space_create_named.js

برمجة تطبيقات

افتح الملف ChatSpaceCreateNamed.gs في "محرِّر برمجة التطبيقات" وانقر على تشغيل.

سيفتح متصفّح ويطلب منك تسجيل الدخول إلى حسابك على Google:

تسجيل الدخول لتفويض تطبيق Chat

الشكل 2. شاشة طلب موافقة OAuth حيث يمكنك اختيار الحساب المطلوب مصادقة التطبيق من خلاله.

بعد تسجيل الدخول، تظهر شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth وتطلب منك منح الإذن للتطبيق.

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

تحديد المشاكل وحلّها في المثال

عند تشغيل chat_space_create_named.py، قد تتلقى رسالة الخطأ التالية:

Expected a JSON object with a single property for a "web" or "installed" application

تعني رسالة الخطأ هذه أنّ ملف client_secrets.json الذي نزّلته من Google Cloud Console لا يبدأ بالسمة "web" أو "installed". بعد المصادقة مع الملف الذي تم تنزيله، إذا لم يحفظ الرمز الخاص بك رمز الدخول في ملف جديد مثل token.json، ستتم كتابة رمز الدخول إلى client_secrets.json، ما قد يؤدي إلى حدوث هذا الخطأ أثناء محاولات التفويض اللاحقة.

لحل هذا الخطأ، يمكنك تنزيل ملف سر العميل من Google Cloud Console مرة أخرى، وحفظ الملف الجديد في مكان الملف الحالي.

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

  • يمكنك التعرّف على الإجراءات الأخرى التي يمكن تنفيذها في Chat API من خلال مراجعة المستندات المرجعية الخاصة بـ Chat API.