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

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

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

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

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

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

المصادقة والتفويض كمشرف في Google Workspace

يوضّح هذا القسم كيف يمكن لمشرفي Google Workspace Workspace إدارة تطبيقات Google Chat ومساحاته في مؤسساتهم باستخدام مصادقة المستخدم.

المصادقة والتفويض باستخدام التفويض على مستوى النطاق

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

المصادقة والاعتماد باستخدام امتيازات المشرف

إذا كنت مشرف نطاق أو مشرفًا مفوَّضًا لديه امتيازات المشرف، يمكنك مصادقة طلباتك إلى Google Chat API وتفويضها باستخدام امتيازات المشرف من خلال ضبط الحقل useAdminAccess في طلبات الطرق السارية. لمزيد من المعلومات، يُرجى الاطّلاع على المستندات المرجعية لواجهات برمجة التطبيقات.

تجدر الإشارة إلى أنّه عندما ينفِّذ تطبيق Google Chat إجراءً يمتلك امتيازات المشرف، لن يُطلع تطبيق Chat المستخدمين على اسم تطبيق Chat الذي نفَّذ الإجراء أو اسم المشرف الذي فوَّضه، ولكنه يخبر المستخدمين فقط بأنّ مشرف المؤسسة مَن نفّذ هذا الإجراء.

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

Java

  • حساب على Google Workspace من فئة Business أو Enterprise يتيح الوصول إلى Google Chat
  • أنشئ مشروعًا على Google Cloud.
  • فعِّل Google Chat API وضبطها باستخدام اسم و رمز ووصف لتطبيق Chat.
  • 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

Node.js

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

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

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

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

  1. في وحدة تحكّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > شاشة موافقة 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".
  5. أضِف معرّفات الموارد المنتظمة (URI) المعتمَدة ذات الصلة بتطبيقك:
    • التطبيقات من جهة العميل (JavaScript): ضمن مصادر JavaScript المعتمَدة، انقر على إضافة معرّف موارد منتظم (URI). بعد ذلك، أدخِل عنوان URL لاستخدامه في طلبات المتصفّح. يحدِّد هذا النطاقات التي يمكن لتطبيقك إرسال طلبات واجهة برمجة التطبيقات منها إلى خادم 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".
  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".
  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.
  5. في حقل "رقم تعريف التطبيق"، أدخِل سلسلة تعريف تطبيقك الفريدة المكونة من 32 حرفًا. يمكنك العثور على قيمة رقم التعريف في عنوان URL لتطبيقك على "سوق Chrome الإلكتروني" وفي لوحة بيانات المطوّر في "سوق Chrome الإلكتروني".
  6. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل الجديد وسر العميل.
  7. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن "معرّفات عملاء OAuth 2.0".

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

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

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

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

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

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

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

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

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

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

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

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

تنزيل ملف JSON الخاص بسِر العميل

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

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

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

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

  3. انقر على تنزيل ملف 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 لبرنامج Python، شغِّل الأمر التالي في واجهة سطر الأوامر:

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

Node.js

لإضافة مكتبات Google API Client Libraries والتبعيات المطلوبة الأخرى إلى مشروعك المستنِد إلى Node.js، انتقِل إلى دليل مشروعك ونفِّذ العبارة التالية في واجهة سطر الأوامر:

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

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

يستخدم هذا المثال خدمة Chat المتقدّمة للاتصال بواجهة برمجة تطبيقات Google Chat. لتفعيل الخدمة لمشروعك على برمجة تطبيقات Google:

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

يمكنك استخدام أي لغة متوافقة مع مكتبات البرامج.

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

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

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

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

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

بعد إكمال عملية المصادقة، تتم مصادقة النص البرمجي باستخدام 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 في مشروعك على Apps Script:

    /**
     * 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 في Apps Script Editor (محرر نصوص Apps Script) وانقر على Run (تشغيل).

سيفتح متصفّح ويطلب منك تسجيل الدخول إلى حسابك على 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 مجددًا، واحفظ الملف الجديد بدلاً من الملف الحالي.

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

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