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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
    

Apps Script

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

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

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

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

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

  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 وغيرها من التبعيات المطلوبة إلى مشروع Node.js، يمكنك التبديل إلى دليل مشروعك وتنفيذ الأمر التالي في واجهة سطر الأوامر:

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

Apps Script

يستخدم هذا النموذج خدمة Chat المتقدمة لطلب 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"، تتم معالجة تدفق التفويض هذا عن طريق "برمجة تطبيقات 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);
    

Apps Script

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

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

    /**
     * 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

Apps Script

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

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

تسجيل الدخول لمنح الإذن لتطبيق في Chat

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

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

بعد منح الإذن، يستدعي النص البرمجي واجهة برمجة تطبيقات Chat، التي ترد من خلال إنشاء مساحة 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 لا يبدأ بالسمة "web" أو "installed". بعد المصادقة باستخدام الملف الذي تم تنزيله، إذا لم يحفظ الرمز رمز الدخول في ملف جديد مثل token.json، ستتم كتابة رمز الدخول على client_secrets.json، ما قد يؤدي إلى حدوث هذا الخطأ أثناء محاولات التفويض اللاحقة.

لإصلاح الخطأ، نزِّل ملف سر العميل من وحدة تحكم Google Cloud مرة أخرى، واحفظ الملف الجديد في مكان الملف الحالي.

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

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