المصادقة والتفويض كمستخدم 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 Workspace

يوضّح هذا القسم كيف يمكن لمشرفي مساحة عمل Google 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، انتقِل إلى "القائمة" > > العلامة التجارية.

    الانتقال إلى "الهوية البصرية للعلامة التجارية"

  2. إذا سبق لك إعداد ، يمكنك إعداد إعدادات "شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth" التالية في العلامة التجارية والجمهور والوصول إلى البيانات. إذا ظهرت لك الرسالة لم يتم الإعداد بعد، انقر على البدء:

    1. ضمن معلومات التطبيق، في حقل اسم التطبيق، أدخِل اسم التطبيق.
    2. في البريد الإلكتروني لدعم المستخدمين، اختَر عنوان بريد إلكتروني للدعم يمكن للمستخدمين التواصل معك من خلاله إذا كانت لديهم أسئلة حول موافقتهم.
    3. انقر على التالي.
    4. ضمن الجمهور، اختَر داخلي. إذا لم تتمكّن من اختيار داخلي، اختَر خارجي.
    5. انقر على التالي.
    6. ضمن معلومات الاتصال، أدخِل عنوان بريد إلكتروني يمكنك تلقّي إشعارات فيه بشأن أي تغييرات تطرأ على مشروعك.
    7. انقر على التالي.
    8. ضمن إنهاء، راجِع سياسة بيانات المستخدمين في خدمات Google API، وإذا كنت توافق عليها، ضَع علامة في المربّع بجانب أوافق على سياسة بيانات المستخدمين في خدمات Google API.
    9. انقر على متابعة.
    10. انقر على إنشاء.
    11. إذا اخترت خارجي لنوع المستخدم، أضِف مستخدمين تجريبيين:
      1. انقر على الجمهور.
      2. ضمن المستخدمون التجريبيون، انقر على إضافة مستخدمين.
      3. أدخِل عنوان بريدك الإلكتروني وأي مستخدمين آخرين معتمَدين للاختبار، ثم انقر على حفظ.
  3. انقر على الوصول إلى البيانات > إضافة نطاقات أو إزالتها. ستظهر لوحة تتضمّن قائمة بنطاقات كل واجهة برمجة تطبيقات فعّلتها في مشروعك على Google Cloud.

    1. ضمن إضافة النطاقات يدويًا، الصِق https://www.googleapis.com/auth/chat.spaces.create، وهو أمر ضروري لتشغيل مثال المصادقة في هذا الدليل. لمراجعة النطاقات المتاحة لواجهة Chat API، يُرجى الاطّلاع على نطاقات Chat API في النظرة العامة حول المصادقة.
    2. انقر على إضافة إلى الجدول.
    3. انقر على تعديل.
    4. بعد اختيار النطاقات التي يتطلّبها تطبيقك، انقر على حفظ في صفحة الوصول إلى البيانات.

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

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

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

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

تطبيق الويب

  1. في "وحدة تحكّم Google Cloud"، انتقِل إلى "القائمة" > > العملاء.

    الانتقال إلى "العملاء"

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

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

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

Android

  1. في "وحدة تحكّم Google Cloud"، انتقِل إلى "القائمة" > > العملاء.

    الانتقال إلى "العملاء"

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

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

iOS

  1. في "وحدة تحكّم Google Cloud"، انتقِل إلى "القائمة" > > العملاء.

    الانتقال إلى "العملاء"

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

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

تطبيق Chrome

  1. في "وحدة تحكّم Google Cloud"، انتقِل إلى "القائمة" > > العملاء.

    الانتقال إلى "العملاء"

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

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

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

  1. في "وحدة تحكّم Google Cloud"، انتقِل إلى "القائمة" > > العملاء.

    الانتقال إلى "العملاء"

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

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

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

  1. في "وحدة تحكّم Google Cloud"، انتقِل إلى "القائمة" > > العملاء.

    الانتقال إلى "العملاء"

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

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

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

  1. في "وحدة تحكّم Google Cloud"، انتقِل إلى "القائمة" > > العملاء.

    الانتقال إلى "العملاء"

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

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

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

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

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

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

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

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

  4. احفظ الملف باسم credentials.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

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

يستخدم هذا النموذج خدمة Advanced Chat لطلب بيانات من واجهة برمجة تطبيقات Google Chat. لتفعيل الخدمة لمشروعك في "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. على يمين الشاشة، انقر على أداة التعديل .
  2. على يمين الصفحة، انقر على إضافة خدمة بجانب الخدمات.
  3. اختَر Google Chat API.
  4. في الإصدار، اختَر v1.
  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 محليًا لتلقّي رمز التفويض من خادم التفويض، ثم يبدّله برمز مميّز للوصول. في نموذج الرمز البرمجي في "برمجة التطبيقات"، تتولّى "برمجة التطبيقات" معالجة مسار التفويض هذا.

بعد إكمال عملية المصادقة، تتم مصادقة البرنامج النصي باستخدام 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 = "/credentials.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("/credentials.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. انسخ الملف credentials.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 في الدليل نفسه الذي يحتوي على credentials.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(
                        'credentials.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 وcredentials.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('./credentials.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. في محرِّر "برمجة التطبيقات"، عدِّل الملف 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 في &quot;محرّر&quot; Apps Script وانقر على تشغيل.

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

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

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

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

  • يمكنك الاطّلاع على المزيد من المعلومات حول إمكانات Chat API من خلال مراجعة المستندات المرجعية لواجهة Chat API.