คู่มือนี้จะอธิบายวิธีใช้ OAuth 2.0 กับผู้ใช้ ข้อมูลเข้าสู่ระบบ Google สำหรับ เข้าถึง Chat API การตรวจสอบสิทธิ์และการให้สิทธิ์ ด้วยข้อมูลเข้าสู่ระบบของผู้ใช้จะช่วยให้แอปใน Chat เข้าถึงข้อมูลของผู้ใช้และดำเนินการ ดำเนินการในนามของผู้ใช้ที่ตรวจสอบสิทธิ์แล้ว ด้วยการตรวจสอบสิทธิ์ใน แอปจะได้รับสิทธิ์เหมือนกับผู้ใช้รายนั้นและดำเนินการต่างๆ ได้ เสมือนว่าดำเนินการโดยผู้ใช้รายนั้น
หลังจากตรวจสอบสิทธิ์และให้สิทธิ์แล้ว การเรียก API ด้วยข้อมูลเข้าสู่ระบบของผู้ใช้ แอป Chat สามารถดำเนินการ ดังต่อไปนี้:
- สร้างพื้นที่ใน Chat
- เพิ่มผู้ใช้ไปยังพื้นที่ใน Chat และการสนทนากลุ่ม
- ทำงานกับข้อมูลผู้ใช้ใน Workspace API อื่นๆ เช่น
- สร้างเหตุการณ์ ใน Google ปฏิทิน
- รายการบันทึก ใน Google ชีต
- ส่งอีเมล ด้วย Gmail
เมื่อแอปดำเนินการกับการตรวจสอบสิทธิ์ผู้ใช้ (เช่น การสร้างพื้นที่ทำงาน) Google Chat จะแสดงข้อความระบุแหล่งที่มา ซึ่งบอกชื่อแอปแก่ผู้ใช้ที่ดำเนินการสำหรับ ผู้ใช้ที่ให้สิทธิ์
![แอป Google Chat สร้างพื้นที่ทำงานสำหรับผู้ใช้](https://developers.google.cn/static/workspace/chat/images/auth-user-create-space.png?authuser=7&hl=th)
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับเวลาที่แอปใน Chat กำหนดให้มีการตรวจสอบสิทธิ์ และ ประเภทการตรวจสอบสิทธิ์ที่จะใช้ โปรดดูที่ ประเภทการตรวจสอบสิทธิ์ที่จำเป็น ในภาพรวมการตรวจสอบสิทธิ์และการให้สิทธิ์ของ Chat API
ตรวจสอบสิทธิ์และให้สิทธิ์โดยใช้การมอบสิทธิ์ทั่วทั้งโดเมน
หากเป็นผู้ดูแลระบบโดเมน คุณสามารถให้สิทธิ์ การมอบสิทธิ์ทั่วทั้งโดเมน เพื่อให้สิทธิ์บัญชีบริการของแอปพลิเคชันในการเข้าถึงผู้ใช้ ข้อมูลที่ไม่มี การขอให้ผู้ใช้แต่ละคนให้ความยินยอม หลังจากกำหนดค่าการมอบสิทธิ์ทั่วทั้งโดเมนแล้ว เวลา บัญชีบริการสามารถแอบอ้างเป็นบัญชีผู้ใช้ได้ แม้ว่าจะใช้บัญชีบริการเพื่อ การตรวจสอบสิทธิ์ การมอบสิทธิ์ทั่วทั้งโดเมนจะแอบอ้างเป็นผู้ใช้ และดังนั้นจึง ถือเป็นการตรวจสอบสิทธิ์ผู้ใช้ ฟังก์ชันการทํางานใดๆ ที่ผู้ใช้ต้อง คุณสามารถใช้การมอบสิทธิ์ทั่วทั้งโดเมนได้
ตรวจสอบสิทธิ์และให้สิทธิ์โดยใช้สิทธิ์ของผู้ดูแลระบบ
หากคุณเป็นผู้ดูแลระบบโดเมนหรือผู้ดูแลระบบที่ได้รับมอบสิทธิ์ซึ่งมีสิทธิ์ของผู้ดูแลระบบ คุณสามารถตรวจสอบสิทธิ์และให้สิทธิ์การเรียก Google Chat API ด้วยสิทธิ์ของผู้ดูแลระบบได้โดยตั้งค่าช่อง use_admin_access
ในคำขอของวิธีการที่เกี่ยวข้อง โปรดดูข้อมูลเพิ่มเติมที่เอกสารอ้างอิง API
โปรดทราบว่าเมื่อแอป Google Chat ดำเนินการโดยใช้สิทธิ์ของผู้ดูแลระบบ Chat จะไม่แจ้งชื่อผู้ใช้ของแอป Chat ที่ดำเนินการนั้นหรือชื่อของผู้ดูแลระบบที่ให้สิทธิ์ แต่จะแจ้งให้ผู้ใช้ทราบว่าผู้ดูแลระบบขององค์กรเป็นผู้ดำเนินการ
ข้อกำหนดเบื้องต้น
Java
- ธุรกิจหรือองค์กร บัญชี Google Workspace ที่มีสิทธิ์เข้าถึง 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
- ธุรกิจหรือองค์กร บัญชี Google Workspace ที่มีสิทธิ์เข้าถึง Google Chat
- สร้างโปรเจ็กต์ Google Cloud
- เปิดใช้และกำหนดค่า Google Chat API โดยใช้ชื่อ ไอคอนและคำอธิบายสำหรับแอป Chat ของคุณ
- Python 3.6 ขึ้นไป
- เครื่องมือจัดการแพ็กเกจ pip
Node.js
- ธุรกิจหรือองค์กร บัญชี Google Workspace ที่มีสิทธิ์เข้าถึง Google Chat
- สร้างโปรเจ็กต์ Google Cloud
- เปิดใช้และกำหนดค่า Google Chat API โดยใช้ชื่อ ไอคอนและคำอธิบายสำหรับแอป Chat ของคุณ
- Node.js 14 ขึ้นไป
- npm เครื่องมือจัดการแพ็กเกจ
-
โปรเจ็กต์ Node.js ที่เริ่มต้นแล้ว หากต้องการเริ่มต้นโปรเจ็กต์ใหม่ ให้สร้างและ
เปลี่ยนเป็นโฟลเดอร์ใหม่ แล้วเรียกใช้คำสั่งต่อไปนี้ในอินเทอร์เฟซบรรทัดคำสั่ง
npm init
Apps Script
- ธุรกิจหรือองค์กร บัญชี Google Workspace ที่มีสิทธิ์เข้าถึง Google Chat
- สร้างโปรเจ็กต์ Google Cloud
- เปิดใช้และกำหนดค่า Google Chat API โดยใช้ชื่อ ไอคอนและคำอธิบายสำหรับแอป Chat ของคุณ
- สร้างโปรเจ็กต์ Apps Script แบบสแตนด์อโลน แล้วเปิดบริการ Chat ขั้นสูง
ขั้นตอนที่ 1: กำหนดค่าหน้าจอขอความยินยอม OAuth ระบุขอบเขต และลงทะเบียนแอป
เมื่อคุณใช้ OAuth 2.0 สำหรับการให้สิทธิ์ Google จะแสดงหน้าจอคำยินยอมเพื่อ ผู้ใช้ รวมถึงสรุปของโครงการ นโยบาย และ ขอบเขตการให้สิทธิ์ การกำหนดค่าหน้าจอขอความยินยอม OAuth ของแอป กำหนดสิ่งที่ Google จะแสดงแก่ผู้ใช้และผู้ตรวจสอบแอป รวมทั้งลงทะเบียนแอปของคุณ เพื่อให้คุณเผยแพร่ในภายหลังได้
แอปทั้งหมดที่ใช้ OAuth 2.0 ต้องมีการกำหนดค่าหน้าจอคำยินยอม แต่คุณมีเพียง จำเป็นต้องแสดงรายการขอบเขตสำหรับแอปที่ผู้ใช้ภายนอก Google Workspace ของคุณใช้ องค์กร
ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > หน้าจอขอความยินยอม OAuth
เลือกประเภทผู้ใช้สำหรับแอป แล้วคลิกสร้าง
กรอกแบบฟอร์มการลงทะเบียนแอป แล้วคลิกบันทึกและดำเนินการต่อ
คลิกเพิ่มหรือนำขอบเขตออก เพิ่มและยืนยัน ขอบเขตการให้สิทธิ์ที่แอปของคุณต้องการ ให้คลิกอัปเดต แล้วคลิกบันทึกและดำเนินการต่อ
ตรวจสอบสรุปการลงทะเบียนแอป คลิกแก้ไขเพื่อทำการเปลี่ยนแปลง หรือ คลิกกลับไปที่แดชบอร์ด
ขั้นตอนที่ 2: สร้างข้อมูลเข้าสู่ระบบรหัสไคลเอ็นต์ OAuth ในคอนโซล Google Cloud
หากต้องการตรวจสอบสิทธิ์ในฐานะผู้ใช้ปลายทางและเข้าถึงข้อมูลผู้ใช้ในแอป คุณจะต้องดำเนินการต่อไปนี้ สร้างรหัสไคลเอ็นต์ OAuth 2.0 อย่างน้อย 1 รหัส รหัสไคลเอ็นต์ใช้เพื่อระบุ แอปเดียวไปยังเซิร์ฟเวอร์ OAuth ของ Google หากแอปทำงานบน แพลตฟอร์ม เช่น Android, iOS และเว็บ คุณต้องสร้างรหัสไคลเอ็นต์แยกต่างหากสำหรับ แต่ละแพลตฟอร์ม
สร้างข้อมูลเข้าสู่ระบบรหัสไคลเอ็นต์ OAuth
เลือกประเภทแอปพลิเคชันเพื่อดูคำแนะนำเฉพาะเกี่ยวกับวิธีสร้างรหัสไคลเอ็นต์ OAuth
เว็บแอปพลิเคชัน
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > เว็บแอปพลิเคชัน
- ในช่องชื่อ ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงเฉพาะในคอนโซล Google Cloud เท่านั้น
- เพิ่ม URI ที่ได้รับอนุญาตที่เกี่ยวข้องกับแอปของคุณ ดังนี้
- แอปฝั่งไคลเอ็นต์ (JavaScript) - ในส่วนต้นทาง JavaScript ที่ได้รับอนุญาต ให้คลิกเพิ่ม URI จากนั้นป้อน URI เพื่อใช้สำหรับคำขอของเบราว์เซอร์ ค่านี้ระบุโดเมนที่แอปพลิเคชันของคุณสามารถส่งคำขอ API ไปยังเซิร์ฟเวอร์ OAuth 2.0
- แอปฝั่งเซิร์ฟเวอร์ (Java, Python และอื่นๆ) - คลิกเพิ่ม URI ในส่วน URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต จากนั้นป้อน URI ปลายทางที่เซิร์ฟเวอร์ OAuth 2.0 สามารถส่งการตอบกลับได้
- คลิกสร้าง หน้าจอที่สร้างไคลเอ็นต์ OAuth จะปรากฏขึ้น ซึ่งจะแสดงรหัสไคลเอ็นต์ใหม่และรหัสลับไคลเอ็นต์ของคุณ
จดรหัสไคลเอ็นต์ ทั้งนี้จะไม่มีการใช้รหัสลับไคลเอ็นต์สำหรับเว็บแอปพลิเคชัน
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วนรหัสไคลเอ็นต์ OAuth 2.0
Android
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > Android
- ใน "ชื่อ" ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงเฉพาะในคอนโซล Google Cloud เท่านั้น
- ใน "ชื่อแพ็กเกจ" ป้อนชื่อแพ็กเกจจากไฟล์
AndroidManifest.xml
- ใน "ลายนิ้วมือสำหรับใบรับรอง SHA-1" ให้ป้อนลายนิ้วมือสำหรับใบรับรอง SHA-1 ที่สร้างขึ้น
- คลิกสร้าง หน้าจอที่สร้างไคลเอ็นต์ OAuth จะปรากฏขึ้น ซึ่งจะแสดงรหัสไคลเอ็นต์ใหม่ของคุณ
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วน "รหัสไคลเอ็นต์ OAuth 2.0"
iOS
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > iOS
- ใน "ชื่อ" ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงเฉพาะในคอนโซล Google Cloud เท่านั้น
- ใน "รหัสแพ็กเกจ" ป้อนตัวระบุชุดซอฟต์แวร์ตามที่แสดงอยู่ในไฟล์
Info.plist
ของแอป - ไม่บังคับ: หากแอปของคุณปรากฏใน Apple App Store ให้ป้อนรหัส App Store
- ไม่บังคับ: ใน "รหัสทีม" ให้ป้อนสตริงอักขระ 10 ตัวที่ไม่ซ้ำกันซึ่งสร้างโดย Apple และมอบหมายให้กับทีมของคุณ
- คลิกสร้าง หน้าจอที่สร้างไคลเอ็นต์ OAuth จะปรากฏขึ้น ซึ่งจะแสดงรหัสไคลเอ็นต์ใหม่และรหัสลับไคลเอ็นต์ของคุณ
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วน "รหัสไคลเอ็นต์ OAuth 2.0"
แอป Chrome
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > แอป Chrome
- ใน "ชื่อ" ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงเฉพาะในคอนโซล Google Cloud เท่านั้น
- ใน "รหัสแอปพลิเคชัน" ให้ป้อนสตริงรหัสยาว 32 อักขระที่ไม่ซ้ำกันของแอป คุณสามารถดูค่ารหัสนี้ได้ใน URL ของ Chrome เว็บสโตร์ของแอปและในหน้าแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ Chrome เว็บสโตร์
- คลิกสร้าง หน้าจอที่สร้างไคลเอ็นต์ OAuth จะปรากฏขึ้น ซึ่งจะแสดงรหัสไคลเอ็นต์ใหม่และรหัสลับไคลเอ็นต์ของคุณ
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วน "รหัสไคลเอ็นต์ OAuth 2.0"
แอปบนเดสก์ท็อป
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > แอปบนเดสก์ท็อป
- ในช่องชื่อ ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงเฉพาะในคอนโซล Google Cloud เท่านั้น
- คลิกสร้าง หน้าจอที่สร้างไคลเอ็นต์ OAuth จะปรากฏขึ้น ซึ่งจะแสดงรหัสไคลเอ็นต์ใหม่และรหัสลับไคลเอ็นต์ของคุณ
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วนรหัสไคลเอ็นต์ OAuth 2.0
ทีวีและ อุปกรณ์อินพุตจำกัด
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > ทีวีและ อุปกรณ์อินพุตจำกัด
- ใน "ชื่อ" ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงเฉพาะในคอนโซล Google Cloud เท่านั้น
- คลิกสร้าง หน้าจอที่สร้างไคลเอ็นต์ OAuth จะปรากฏขึ้น ซึ่งจะแสดงรหัสไคลเอ็นต์ใหม่และรหัสลับไคลเอ็นต์ของคุณ
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วน "รหัสไคลเอ็นต์ OAuth 2.0"
Universal Windows Platform (UWP)
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > แพลตฟอร์ม Windows สากล (UWP)
- ใน "ชื่อ" ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงเฉพาะในคอนโซล Google Cloud เท่านั้น
- ใน "รหัสร้านค้า" ให้ป้อนค่ารหัส Microsoft Store แบบ 12 อักขระที่ไม่ซ้ำกันของแอป คุณดูรหัสนี้ได้ใน URL ใน Microsoft Store ของแอปและในศูนย์พาร์ทเนอร์
- คลิกสร้าง หน้าจอที่สร้างไคลเอ็นต์ OAuth จะปรากฏขึ้น ซึ่งจะแสดงรหัสไคลเอ็นต์ใหม่และรหัสลับไคลเอ็นต์ของคุณ
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วน "รหัสไคลเอ็นต์ OAuth 2.0"
ดาวน์โหลดไฟล์ JSON รหัสลับไคลเอ็นต์
ไฟล์รหัสลับไคลเอ็นต์คือการแสดงรหัสไคลเอ็นต์ OAuth ในรูปแบบ JSON ข้อมูลเข้าสู่ระบบที่แอป Chat จะใช้อ้างอิงได้เมื่อ ให้ข้อมูลเข้าสู่ระบบ
ในคอนโซล Google Cloud ให้ไปที่เมนู > API และ บริการ > ข้อมูลเข้าสู่ระบบ
ในส่วนรหัสไคลเอ็นต์ OAuth 2.0 ให้คลิกรหัสไคลเอ็นต์ที่คุณสร้าง
คลิกดาวน์โหลด JSON
บันทึกไฟล์เป็น
client_secrets.json
ขั้นตอนที่ 3: ติดตั้งไลบรารีของไคลเอ็นต์ Google และทรัพยากร Dependency อื่นๆ
ติดตั้งไลบรารีไคลเอ็นต์ของ Google และการอ้างอิงอื่นๆ ที่จำเป็นสำหรับโปรเจ็กต์
Java
วิธีเพิ่มไลบรารีของไคลเอ็นต์ของ Google และทรัพยากร Dependency อื่นๆ ที่จำเป็น
สำหรับโครงการ Maven ให้แก้ไขไฟล์ pom.xml
ในไดเรกทอรีของโครงการและเพิ่ม
ทรัพยากร Dependency ต่อไปนี้
<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 และทรัพยากร Dependency อื่นๆ ที่จำเป็น โปรเจ็กต์ Node.js โปรดสลับไปที่ไดเรกทอรีของโปรเจ็กต์และเรียกใช้ดังนี้ ในอินเทอร์เฟซบรรทัดคำสั่ง
npm install "@googleapis/chat" open server-destroy
Apps Script
ตัวอย่างนี้ใช้ บริการ Chat ขั้นสูง เพื่อเรียกใช้ Google Chat API หากต้องการเปิดบริการสำหรับ โครงการ Apps Script:
- คลิกตัดต่อวิดีโอ ทางด้านซ้าย
- คลิกเพิ่มบริการทางด้านซ้ายข้างบริการ
- เลือก Google Chat API
- ในเวอร์ชัน ให้เลือก v1
- คลิกเพิ่ม
คุณจะใช้ภาษาใดก็ได้ที่ ไลบรารีของไคลเอ็นต์
ขั้นตอนที่ 4: เขียนสคริปต์ที่เรียกใช้ Chat API
การเรียกใช้ API ที่มีการให้สิทธิ์ OAuth เป็นกระบวนการที่มีหลายขั้นตอน ในเว็บหรือ แอปพลิเคชันบนเดสก์ท็อป ขั้นตอนนี้มักเป็นดังนี้
- แอปจะนำผู้ใช้ไปยังหน้าการให้สิทธิ์ซึ่งขอเข้าถึงผู้ใช้ ข้อมูลที่ระบุโดยขอบเขตการให้สิทธิ์ แอประบุตนเองกับไคลเอ็นต์ ข้อมูลเข้าสู่ระบบของบัตรประจำตัว
- ผู้ใช้ตรวจสอบสิทธิ์ที่แอปขอและอนุมัติ อีกครั้ง
- เซิร์ฟเวอร์การตรวจสอบสิทธิ์ของ Google จะเปลี่ยนเส้นทางเบราว์เซอร์ไปยัง HTTP ของแอป ปลายทางพร้อมด้วยรหัสการให้สิทธิ์
- แอปพลิเคชันจะส่งคำขออีกรายการไปยังเซิร์ฟเวอร์การให้สิทธิ์ของ Google เพื่อ แลกเปลี่ยนรหัสการให้สิทธิ์สำหรับโทเค็นเพื่อการเข้าถึง
- แอปพลิเคชันจะใช้โทเค็นเพื่อการเข้าถึงเพื่อเรียกใช้ API ในนามของผู้ใช้
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับกระบวนการให้สิทธิ์ OAuth โปรดดูที่ คู่มือการใช้ OAuth 2.0 เพื่อเข้าถึง Google APIs
ตัวอย่างโค้ดต่อไปนี้ใน Java, Python และ Node.js ใช้ ไลบรารีไคลเอ็นต์ เพื่อเรียกใช้ขั้นตอนการให้สิทธิ์ OAuth เซิร์ฟเวอร์จะเปิดเซิร์ฟเวอร์ HTTP ในเครื่องเพื่อ ได้รับรหัสการให้สิทธิ์กลับจากเซิร์ฟเวอร์การให้สิทธิ์ การแลกเปลี่ยนโทเค็นเพื่อการเข้าถึง ในตัวอย่างโค้ด Apps Script ขั้นตอนการให้สิทธิ์นี้คือ จัดการโดย Apps Script
หลังจากเสร็จสิ้นขั้นตอนการตรวจสอบสิทธิ์ สคริปต์จะตรวจสอบสิทธิ์กับ Chat API โดยใช้โทเค็นเพื่อการเข้าถึงของผู้ใช้ แล้วสร้างพื้นที่ทำงาน
Java
- เปิดไฟล์ในไดเรกทอรีของโปรเจ็กต์
src/main/java/com/google/chat/app/authsample/App.java
แทนที่เนื้อหาใน
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(); } }
สร้างไดเรกทอรีย่อยใหม่ชื่อ
resources
ภายในไดเรกทอรีของโปรเจ็กต์คัดลอกไฟล์
client_secrets.json
ไปยังไดเรกทอรีย่อยresources
หากต้องการกำหนดค่า Maven ให้รวมไฟล์รหัสลับไคลเอ็นต์ในแพ็กเกจโปรเจ็กต์ แก้ไขไฟล์
pom.xml
ในไดเรกทอรีของโครงการและเพิ่มข้อมูลต่อไปนี้ การกำหนดค่าในส่วน<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
หากต้องการกำหนดค่า Maven เพื่อรวมทรัพยากร Dependency ในแพ็กเกจโปรเจ็กต์และ เพื่อเรียกใช้คลาสหลักของแอปพลิเคชันของคุณ ให้แก้ไขไฟล์
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
บันทึกรหัสต่อไปนี้ในไฟล์ชื่อ
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
บันทึกรหัสต่อไปนี้ในไฟล์ชื่อ
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
แก้ไขไฟล์
appsscript.json
ในเครื่องมือแก้ไข Apps Script และเพิ่มขอบเขต OAuth ที่จำเป็นในการเรียก API ดังนี้"oauthScopes": [ "https://www.googleapis.com/auth/chat.spaces.create" ]
บันทึกโค้ดต่อไปนี้ในไฟล์ชื่อ
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
Apps Script
เปิดไฟล์ ChatSpaceCreateNamed.gs
ใน Apps Script
Editor แล้วคลิก Run
เบราว์เซอร์จะเปิดขึ้นและแจ้งให้คุณลงชื่อเข้าใช้บัญชี Google โดยทำดังนี้
หลังจากลงชื่อเข้าใช้ หน้าจอขอความยินยอม OAuth จะปรากฏขึ้นและขอให้คุณให้สิทธิ์ สิทธิ์ของแอป
หลังจากที่คุณให้สิทธิ์แล้ว สคริปต์จะเรียกฟังก์ชัน
Chat API ซึ่งตอบสนองด้วยการสร้าง
พื้นที่ใน Chat ที่มีชื่อที่แสดง API-made
คอนโซลจะพิมพ์
รายละเอียดของการเรียก API หากต้องการค้นหาพื้นที่ทำงาน ให้ไปที่แผงพื้นที่ทำงานใน
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 API