เอกสารนี้อธิบายวิธีที่แอปพลิเคชันซึ่งติดตั้งในอุปกรณ์ต่างๆ เช่น โทรศัพท์ แท็บเล็ต และ คอมพิวเตอร์ ใช้ปลายทาง OAuth 2.0 ของ Google เพื่อให้สิทธิ์เข้าถึง YouTube Data API
OAuth 2.0 อนุญาตให้ผู้ใช้แชร์ข้อมูลบางอย่างกับแอปพลิเคชันโดยที่ยังเก็บชื่อผู้ใช้ รหัสผ่าน และข้อมูลอื่นๆ ไว้เป็นส่วนตัว ตัวอย่างเช่น แอปพลิเคชันสามารถใช้ OAuth 2.0 เพื่อขอสิทธิ์ ในการอัปโหลดวิดีโอไปยังช่อง YouTube ของผู้ใช้
ระบบจะกระจายแอปที่ติดตั้งไปยังอุปกรณ์แต่ละเครื่อง และถือว่าแอปเหล่านี้ ไม่สามารถเก็บข้อมูลลับได้ โดยจะเข้าถึง Google API ได้ในขณะที่ผู้ใช้ใช้งานแอปหรือเมื่อแอปทำงานอยู่เบื้องหลัง
ขั้นตอนการให้สิทธิ์นี้คล้ายกับขั้นตอนที่ใช้สำหรับ แอปพลิเคชันเว็บเซิร์ฟเวอร์ ความแตกต่างหลักคือ แอปที่ติดตั้งจะต้องเปิดเบราว์เซอร์ของระบบและระบุ URI การเปลี่ยนเส้นทางในเครื่องเพื่อจัดการ การตอบกลับจากเซิร์ฟเวอร์การให้สิทธิ์ของ Google
ไลบรารีและตัวอย่าง
สำหรับแอปบนอุปกรณ์เคลื่อนที่ เราขอแนะนำให้ใช้ไลบรารีแบบเนทีฟของ Google Identity Services เวอร์ชันล่าสุดสำหรับ Android และไลบรารีแบบเนทีฟของ Google Sign-In สำหรับ iOS ไลบรารีเหล่านี้จัดการการให้สิทธิ์ผู้ใช้และติดตั้งใช้งานได้ง่ายกว่าโปรโตคอลระดับล่างที่อธิบายไว้ที่นี่
สำหรับแอปที่ทำงานในอุปกรณ์ที่ไม่รองรับเบราว์เซอร์ของระบบหรือมีอินพุตที่จำกัด เช่น ทีวี คอนโซลเกม กล้อง หรือเครื่องพิมพ์ โปรดดู OAuth 2.0 สำหรับทีวีและอุปกรณ์ หรือการลงชื่อเข้าใช้บนทีวีและอุปกรณ์อินพุตที่จำกัด
ข้อกำหนดเบื้องต้น
เปิดใช้ API สำหรับโปรเจ็กต์
แอปพลิเคชันใดก็ตามที่เรียกใช้ Google API จะต้องเปิดใช้ API เหล่านั้นใน API Console
วิธีเปิดใช้ API สำหรับโปรเจ็กต์
- Open the API Library ใน Google API Console
- If prompted, select a project, or create a new one.
- ใช้หน้าไลบรารีเพื่อค้นหาและเปิดใช้ YouTube Data API ค้นหา API อื่นๆ ที่แอปพลิเคชันของคุณจะใช้และเปิดใช้ API เหล่านั้นด้วย
สร้างข้อมูลเข้าสู่ระบบการให้สิทธิ์
แอปพลิเคชันที่ใช้ OAuth 2.0 เพื่อเข้าถึง Google APIs ต้องมีข้อมูลเข้าสู่ระบบการให้สิทธิ์ ที่ระบุแอปพลิเคชันไปยังเซิร์ฟเวอร์ OAuth 2.0 ของ Google ขั้นตอนต่อไปนี้จะอธิบายวิธี สร้างข้อมูลเข้าสู่ระบบสำหรับโปรเจ็กต์ จากนั้นแอปพลิเคชันจะใช้ข้อมูลเข้าสู่ระบบเพื่อเข้าถึง API ที่คุณเปิดใช้สำหรับโปรเจ็กต์นั้นได้
- Go to the Credentials page.
- คลิกสร้างไคลเอ็นต์
- ส่วนต่อไปนี้จะอธิบายประเภทไคลเอ็นต์ที่เซิร์ฟเวอร์การให้สิทธิ์ของ Google รองรับ เลือกประเภทไคลเอ็นต์ที่แนะนําสําหรับ แอปพลิเคชัน ตั้งชื่อไคลเอ็นต์ OAuth และตั้งค่าช่องอื่นๆ ในแบบฟอร์มตาม ความเหมาะสม
Android
- เลือกประเภทแอปพลิเคชัน Android
- ป้อนชื่อสำหรับไคลเอ็นต์ OAuth ชื่อนี้จะแสดงใน ของโปรเจ็กต์เพื่อระบุไคลเอ็นต์
- ป้อนชื่อแพ็กเกจของแอป Android ค่านี้กำหนดไว้ในแอตทริบิวต์
package
ขององค์ประกอบ<manifest>
ในไฟล์ Manifest ของแอป - ป้อนลายนิ้วมือใบรับรองการลงนาม SHA-1 ของการเผยแพร่แอป
- หากแอปใช้ App Signing โดย Google Play ให้คัดลายนิ้วมือ SHA-1 จากหน้า App Signing ของ Play Console
- หากคุณจัดการคลังคีย์และคีย์การลงนามด้วยตนเอง ให้ใช้ยูทิลิตี keytool
ที่รวมอยู่ใน Java เพื่อพิมพ์ข้อมูลใบรับรองในรูปแบบที่มนุษย์อ่านได้ คัดลอกค่า
SHA1
ในส่วนCertificate fingerprints
ของเอาต์พุต keytool ดูข้อมูลเพิ่มเติมได้ที่หัวข้อการตรวจสอบสิทธิ์ไคลเอ็นต์ในเอกสารประกอบเกี่ยวกับ Google APIs สำหรับ Android
- (ไม่บังคับ) ยืนยันการเป็นเจ้าของแอปพลิเคชัน Android
- คลิกสร้าง
iOS
- เลือกประเภทแอปพลิเคชัน iOS
- ป้อนชื่อสำหรับไคลเอ็นต์ OAuth ชื่อนี้จะแสดงใน ของโปรเจ็กต์เพื่อระบุไคลเอ็นต์
- ป้อนรหัสชุดซอฟต์แวร์สำหรับแอปของคุณ รหัสชุดซอฟต์แวร์คือค่าของคีย์
CFBundleIdentifier
ในไฟล์ทรัพยากรรายการพร็อพเพอร์ตี้ข้อมูลของแอป (info.plist) ค่า
มักจะแสดงในแผงทั่วไปหรือแผงการลงนามและความสามารถของ
โปรแกรมแก้ไขโปรเจ็กต์ Xcode นอกจากนี้ ระบบยังแสดงรหัส Bundle ในส่วนข้อมูลทั่วไปของ
หน้าข้อมูลแอปสำหรับแอปใน
เว็บไซต์ App Store Connect ของ Apple ด้วย
ตรวจสอบว่าคุณใช้ Bundle ID ที่ถูกต้องสำหรับแอป เนื่องจากคุณจะเปลี่ยนไม่ได้หากใช้ฟีเจอร์ App Check
- (ไม่บังคับ)
ป้อนรหัส App Store ของแอป หากเผยแพร่แอปใน App Store ของ Apple รหัสร้านค้า คือสตริงตัวเลขที่รวมอยู่ใน URL ของ Apple App Store ทุกรายการ
- เปิด แอป Apple App Store ในอุปกรณ์ iOS หรือ iPadOS
- ค้นหาแอปของคุณ
- เลือกปุ่มแชร์ (สี่เหลี่ยมและสัญลักษณ์ลูกศรขึ้น)
- เลือกคัดลอกลิงก์
- วางลิงก์ลงในเครื่องมือแก้ไขข้อความ รหัส App Store คือส่วนสุดท้ายของ URL
ตัวอย่าง:
https://apps.apple.com/app/google/id284815942
- (ไม่บังคับ)
ป้อนรหัสทีม ดูข้อมูลเพิ่มเติมได้ที่ ค้นหา Team ID ในเอกสารประกอบของบัญชีนักพัฒนาซอฟต์แวร์ Apple
หมายเหตุ: คุณต้องระบุฟิลด์รหัสทีมหากเปิดใช้ App Check สำหรับไคลเอ็นต์ - (ไม่บังคับ)
เปิดใช้ App Check สำหรับแอป iOS เมื่อเปิดใช้ App Check ระบบจะใช้บริการ App Attest ของ Apple เพื่อยืนยันว่าคำขอ OAuth 2.0 ที่มาจากไคลเอ็นต์ OAuth ของคุณเป็นคำขอจริง และมาจากแอปของคุณ ซึ่งจะช่วย ลดความเสี่ยงของการแอบอ้างเป็นแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดใช้ App Check สำหรับแอป iOS
- คลิกสร้าง
UWP
- เลือกประเภทแอปพลิเคชัน Universal Windows Platform
- ป้อนชื่อสำหรับไคลเอ็นต์ OAuth ชื่อนี้จะแสดงใน ของโปรเจ็กต์เพื่อระบุไคลเอ็นต์
- ป้อนรหัส Microsoft Store ของแอปซึ่งมี 12 อักขระ คุณดูค่านี้ได้ในศูนย์พาร์ทเนอร์ของ Microsoft ในหน้าข้อมูลประจำตัวของแอปในส่วนการจัดการแอป
- คลิกสร้าง
สำหรับแอป UWP รูปแบบ URI ที่กำหนดเองต้องมีความยาวไม่เกิน 39 อักขระ
ระบุขอบเขตการเข้าถึง
ขอบเขตช่วยให้แอปพลิเคชันขอสิทธิ์เข้าถึงเฉพาะทรัพยากรที่จำเป็นเท่านั้น ในขณะเดียวกันก็ ช่วยให้ผู้ใช้ควบคุมระดับการเข้าถึงที่อนุญาตให้แอปพลิเคชันของคุณได้ด้วย ดังนั้น จำนวนขอบเขตที่ขออาจมีความสัมพันธ์แบบผกผันกับความเป็นไปได้ที่จะได้รับความยินยอมจากผู้ใช้
ก่อนที่จะเริ่มใช้การให้สิทธิ์ OAuth 2.0 เราขอแนะนำให้คุณระบุขอบเขต ที่แอปจะต้องได้รับสิทธิ์เข้าถึง
YouTube Data API เวอร์ชัน 3 ใช้ขอบเขตต่อไปนี้
ขอบเขต | คำอธิบาย |
---|---|
https://www. |
จัดการบัญชี YouTube ของคุณ |
https://www. |
ดูรายชื่อสมาชิกปัจจุบันที่ใช้งานอยู่ในช่องของคุณ ระดับปัจจุบันของสมาชิก และวันที่เริ่มเป็นสมาชิก |
https://www. |
ดู แก้ไข และลบวิดีโอ YouTube การจัดประเภท ความคิดเห็น และคำบรรยายวิดีโออย่างถาวร |
https://www. |
ดูบัญชี YouTube ของคุณ |
https://www. |
จัดการวิดีโอ YouTube ของคุณ |
https://www. |
ดูและจัดการพื้นที่ของคุณและเนื้อหาที่เกี่ยวข้องใน YouTube |
https://www. |
ดูข้อมูลส่วนตัวของช่อง YouTube ของคุณที่เกี่ยวข้องในระหว่างกระบวนการตรวจสอบกับพาร์ทเนอร์ YouTube |
เอกสารขอบเขต API ของ OAuth 2.0 มีรายการขอบเขตทั้งหมด ที่คุณอาจใช้เพื่อเข้าถึง Google API
การขอโทเค็นเพื่อการเข้าถึง OAuth 2.0
ขั้นตอนต่อไปนี้แสดงวิธีที่แอปพลิเคชันโต้ตอบกับเซิร์ฟเวอร์ OAuth 2.0 ของ Google เพื่อขอรับ ความยินยอมจากผู้ใช้ในการส่งคำขอ API ในนามของผู้ใช้ แอปพลิเคชันของคุณต้องได้รับความยินยอมดังกล่าวก่อนจึงจะดำเนินการคำขอ Google API ที่ต้องมีการให้สิทธิ์จากผู้ใช้ได้
ขั้นตอนที่ 1: สร้างตัวยืนยันโค้ดและความท้าทาย
Google รองรับโปรโตคอล Proof Key for Code Exchange (PKCE) เพื่อให้ขั้นตอนการติดตั้งแอปมีความปลอดภัยมากขึ้น ระบบจะสร้างตัวยืนยันรหัสที่ไม่ซ้ำกันสำหรับคำขอการให้สิทธิ์ทุกรายการ และส่งค่าที่แปลงแล้วซึ่งเรียกว่า "code_challenge" ไปยังเซิร์ฟเวอร์การให้สิทธิ์เพื่อรับรหัสการให้สิทธิ์
สร้างตัวยืนยันโค้ด
code_verifier
คือสตริงแบบสุ่มที่เข้ารหัสที่มีเอนโทรปีสูงโดยใช้อักขระที่ไม่ได้สงวนไว้
[A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" โดยมีความยาวขั้นต่ำ 43 อักขระ
และความยาวสูงสุด 128 อักขระ
ตัวยืนยันรหัสควรมีเอนโทรปีเพียงพอที่จะทำให้การคาดเดาค่าเป็นไปไม่ได้
สร้างรหัสยืนยัน
ระบบรองรับวิธีการสร้างการท้าทายด้วยรหัส 2 วิธี
วิธีการสร้าง Code Challenge | |
---|---|
S256 (แนะนํา) | การทดสอบโค้ดคือแฮช SHA256 ที่เข้ารหัส Base64URL (ไม่มีการเพิ่ม) ของตัวยืนยันโค้ด
|
ธรรมดา | Code Challenge มีค่าเดียวกันกับ Code Verifier ที่สร้างขึ้นข้างต้น
|
ขั้นตอนที่ 2: ส่งคำขอไปยังเซิร์ฟเวอร์ OAuth 2.0 ของ Google
หากต้องการขอการให้สิทธิ์จากผู้ใช้ ให้ส่งคำขอไปยังเซิร์ฟเวอร์การให้สิทธิ์ของ Google ที่
https://accounts.google.com/o/oauth2/v2/auth
ปลายทางนี้จะจัดการการค้นหาเซสชันที่ใช้งานอยู่
ตรวจสอบสิทธิ์ผู้ใช้ และขอรับความยินยอมจากผู้ใช้ ปลายทางจะเข้าถึงได้ผ่าน SSL เท่านั้น และจะปฏิเสธการเชื่อมต่อ HTTP (ที่ไม่ใช่ SSL)
เซิร์ฟเวอร์การให้สิทธิ์รองรับพารามิเตอร์สตริงคำค้นหาต่อไปนี้สำหรับแอปพลิเคชันที่ติดตั้ง แล้ว
พารามิเตอร์ | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
client_id |
จำเป็น
รหัสไคลเอ็นต์สำหรับแอปพลิเคชัน คุณดูค่านี้ได้ใน |
||||||||||||||||
redirect_uri |
จำเป็น
กำหนดวิธีที่เซิร์ฟเวอร์การให้สิทธิ์ของ Google ส่งการตอบกลับไปยังแอปของคุณ มีตัวเลือกการเปลี่ยนเส้นทางหลายตัวเลือกสำหรับแอปที่ติดตั้งไว้ และคุณจะต้องตั้งค่าข้อมูลเข้าสู่ระบบการให้สิทธิ์โดยคำนึงถึงวิธีการเปลี่ยนเส้นทางที่เฉพาะเจาะจง ค่าต้องตรงกับ URI การเปลี่ยนเส้นทางที่ได้รับอนุญาตสำหรับไคลเอ็นต์ OAuth 2.0
ที่คุณกำหนดค่าไว้ใน
ของไคลเอ็นต์ หากค่านี้ไม่ตรงกับ URI ที่ได้รับอนุญาต คุณจะได้รับ ตารางด้านล่างแสดงค่าพารามิเตอร์
|
||||||||||||||||
response_type |
จำเป็น
กำหนดว่าปลายทาง Google OAuth 2.0 จะแสดงรหัสการให้สิทธิ์หรือไม่ ตั้งค่าพารามิเตอร์เป็น |
||||||||||||||||
scope |
จำเป็น
รายการขอบเขตที่คั่นด้วยช่องว่างซึ่งระบุทรัพยากรที่แอปพลิเคชันของคุณเข้าถึงได้ในนามของผู้ใช้ ค่าเหล่านี้จะแจ้งให้หน้าจอคำยินยอมที่ Google แสดงต่อผู้ใช้ทราบ ขอบเขตช่วยให้แอปพลิเคชันขอสิทธิ์เข้าถึงเฉพาะทรัพยากรที่จำเป็น และยังช่วยให้ผู้ใช้ควบคุมระดับการเข้าถึงที่อนุญาตให้แอปพลิเคชันของคุณได้ด้วย ดังนั้น จำนวนขอบเขตที่ขอ จึงมีความสัมพันธ์แบบผกผันกับแนวโน้มที่จะได้รับความยินยอมจากผู้ใช้ YouTube Data API เวอร์ชัน 3 ใช้ขอบเขตต่อไปนี้
เอกสารขอบเขต API ของ OAuth 2.0 มีรายการขอบเขตทั้งหมดที่คุณอาจใช้เพื่อเข้าถึง Google API |
||||||||||||||||
code_challenge |
แนะนำ
ระบุ |
||||||||||||||||
code_challenge_method |
แนะนำ
ระบุวิธีการที่ใช้ในการเข้ารหัส |
||||||||||||||||
state |
แนะนำ
ระบุค่าสตริงที่แอปพลิเคชันใช้เพื่อรักษาสถานะระหว่างคำขอการให้สิทธิ์กับคำตอบของเซิร์ฟเวอร์การให้สิทธิ์
เซิร์ฟเวอร์จะแสดงค่าที่แน่นอนที่คุณส่งเป็นคู่ คุณใช้พารามิเตอร์นี้ได้หลายวัตถุประสงค์ เช่น การนำผู้ใช้ไปยัง
แหล่งข้อมูลที่ถูกต้องในแอปพลิเคชัน การส่ง Nonce และการลดความเสี่ยงของการปลอมแปลงคำขอข้ามเว็บไซต์
เนื่องจาก |
||||||||||||||||
login_hint |
ไม่บังคับ
หากแอปพลิเคชันทราบว่าผู้ใช้รายใดพยายามตรวจสอบสิทธิ์ แอปพลิเคชันจะใช้พารามิเตอร์นี้ เพื่อเป็นคำแนะนำให้กับเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของ Google ได้ เซิร์ฟเวอร์ใช้คำใบ้เพื่อ ลดความซับซ้อนของขั้นตอนการเข้าสู่ระบบโดยการป้อนข้อมูลในช่องอีเมลล่วงหน้าในแบบฟอร์มการลงชื่อเข้าใช้ หรือโดยการ เลือกเซสชันการเข้าสู่ระบบหลายรายการที่เหมาะสม ตั้งค่าพารามิเตอร์เป็นอีเมลหรือตัวระบุ |
ตัวอย่าง URL การให้สิทธิ์
แท็บด้านล่างแสดงตัวอย่าง URL การให้สิทธิ์สำหรับตัวเลือก URI การเปลี่ยนเส้นทางต่างๆ
แต่ละ URL จะขอสิทธิ์เข้าถึงขอบเขตที่อนุญาตให้เข้าถึงเพื่อดูบัญชี YouTube ของผู้ใช้URL จะเหมือนกันทุกประการ ยกเว้นค่าของพารามิเตอร์ redirect_uri
นอกจากนี้ URL ยังมีพารามิเตอร์ response_type
และ client_id
ที่จำเป็น รวมถึงพารามิเตอร์ state
ที่ไม่บังคับด้วย URL แต่ละรายการมีการขึ้นบรรทัดใหม่และเว้นวรรคเพื่อให้
อ่านง่าย
รูปแบบ URI ที่กำหนดเอง
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=com.example.app%3A/oauth2redirect& client_id=client_id
ที่อยู่ IP แบบ Loopback
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=http%3A//127.0.0.1%3A9004& client_id=client_id
ขั้นตอนที่ 3: Google ขอความยินยอมจากผู้ใช้
ในขั้นตอนนี้ ผู้ใช้จะเป็นผู้เลือกว่าจะให้สิทธิ์เข้าถึงที่แอปพลิเคชันของคุณขอหรือไม่ ในขั้นตอนนี้ Google จะแสดงหน้าต่างความยินยอมซึ่งแสดงชื่อแอปพลิเคชันและบริการ Google API ที่แอปพลิเคชันกำลังขอสิทธิ์เข้าถึงด้วยข้อมูลเข้าสู่ระบบการให้สิทธิ์ของผู้ใช้ รวมถึง สรุปขอบเขตการเข้าถึงที่จะได้รับ จากนั้นผู้ใช้จะให้ความยินยอมในการให้สิทธิ์เข้าถึงขอบเขตอย่างน้อย 1 รายการที่แอปพลิเคชันของคุณขอ หรือปฏิเสธคำขอได้
แอปพลิเคชันของคุณไม่จำเป็นต้องดำเนินการใดๆ ในขั้นตอนนี้ เนื่องจากรอการตอบกลับจากเซิร์ฟเวอร์ OAuth 2.0 ของ Google ซึ่งจะระบุว่ามีการให้สิทธิ์เข้าถึงหรือไม่ ซึ่งจะอธิบายในขั้นตอนต่อไป
ข้อผิดพลาด
คำขอไปยังปลายทางการให้สิทธิ์ OAuth 2.0 ของ Google อาจแสดงข้อความแสดงข้อผิดพลาดที่ผู้ใช้เห็น แทนที่จะเป็นขั้นตอนการตรวจสอบสิทธิ์และการให้สิทธิ์ที่คาดไว้ รหัสข้อผิดพลาดที่พบบ่อยและวิธีแก้ไขที่แนะนำมีดังนี้
admin_policy_enforced
บัญชี Google ไม่สามารถให้สิทธิ์ขอบเขตอย่างน้อย 1 รายการที่ขอเนื่องจากนโยบายของผู้ดูแลระบบ Google Workspace ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ผู้ดูแลระบบอาจจำกัดการเข้าถึงขอบเขตทั้งหมดหรือขอบเขตที่มีความละเอียดอ่อนและ ขอบเขตที่จำกัดจนกว่าจะมีการให้สิทธิ์เข้าถึงรหัสไคลเอ็นต์ OAuth อย่างชัดแจ้งได้ที่บทความช่วยเหลือสำหรับผู้ดูแลระบบ Google Workspace ควบคุมว่าจะให้แอปของบุคคลที่สามและแอปภายในรายการใดเข้าถึงข้อมูล Google Workspace ได้บ้าง
disallowed_useragent
ปลายทางการให้สิทธิ์จะแสดงภายใน User-Agent แบบฝังที่นโยบาย OAuth 2.0 ของ Google ไม่อนุญาต
Android
นักพัฒนาแอป Android อาจเห็นข้อความแสดงข้อผิดพลาดนี้เมื่อเปิดคำขอการให้สิทธิ์ใน
android.webkit.WebView
นักพัฒนาแอปควรใช้ไลบรารี Android แทน เช่น
Google Sign-In สำหรับ Android หรือ
AppAuth สำหรับ Android ของ OpenID Foundation
นักพัฒนาเว็บอาจพบข้อผิดพลาดนี้เมื่อแอป Android เปิดลิงก์เว็บทั่วไปใน User-Agent แบบฝัง และผู้ใช้นำทางไปยังปลายทางการให้สิทธิ์ OAuth 2.0 ของ Google จาก เว็บไซต์ของคุณ นักพัฒนาแอปควรอนุญาตให้ลิงก์ทั่วไปเปิดในตัวแฮนเดิลลิงก์เริ่มต้นของ ระบบปฏิบัติการ ซึ่งรวมถึงทั้งตัวแฮนเดิล Android App Link หรือแอปเบราว์เซอร์เริ่มต้น นอกจากนี้ ไลบรารี แท็บที่กำหนดเองของ Android ยังเป็นตัวเลือกที่รองรับด้วย
iOS
นักพัฒนาแอป iOS และ macOS อาจพบข้อผิดพลาดนี้เมื่อเปิดคำขอการให้สิทธิ์ใน
WKWebView
นักพัฒนาแอปควรใช้ไลบรารี iOS เช่น
Google Sign-In สำหรับ iOS หรือ
AppAuth สำหรับ iOS ของ OpenID Foundation แทน
นักพัฒนาเว็บอาจพบข้อผิดพลาดนี้เมื่อแอป iOS หรือ macOS เปิดลิงก์เว็บทั่วไปใน
User-Agent ที่ฝังอยู่ และผู้ใช้นำทางไปยังปลายทางการให้สิทธิ์ OAuth 2.0 ของ Google จาก
เว็บไซต์ของคุณ นักพัฒนาแอปควรอนุญาตให้ลิงก์ทั่วไปเปิดในตัวแฮนเดิลลิงก์เริ่มต้นของ
ระบบปฏิบัติการ ซึ่งรวมถึงทั้งตัวแฮนเดิล
Universal Link
หรือแอปเบราว์เซอร์เริ่มต้น นอกจากนี้ ไลบรารี
SFSafariViewController
ยังเป็นตัวเลือกที่รองรับด้วย
org_internal
รหัสไคลเอ็นต์ OAuth ในคำขอเป็นส่วนหนึ่งของโปรเจ็กต์ที่จำกัดการเข้าถึงบัญชี Google ใน องค์กร Google Cloud ที่เฉพาะเจาะจง ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่านี้ได้ที่ส่วนประเภทผู้ใช้ในบทความช่วยเหลือเกี่ยวกับการตั้งค่าหน้าจอขอความยินยอม OAuth
deleted_client
ไคลเอ็นต์ OAuth ที่ใช้ส่งคำขอถูกลบไปแล้ว การลบอาจเกิดขึ้นด้วยตนเอง หรือโดยอัตโนมัติในกรณีของ ไคลเอ็นต์ที่ไม่ได้ใช้ คุณกู้คืนลูกค้าที่ถูกลบได้ภายใน 30 วันนับจากวันที่ลบ ดูข้อมูลเพิ่มเติม
invalid_grant
หากคุณใช้
เครื่องมือตรวจสอบโค้ดและ
ชาเลนจ์ พารามิเตอร์ code_callenge
จะไม่ถูกต้องหรือไม่พบ ตรวจสอบว่าได้ตั้งค่าพารามิเตอร์ code_challenge
อย่างถูกต้อง
เมื่อรีเฟรชโทเค็นเพื่อการเข้าถึง โทเค็นอาจหมดอายุหรือถูก ทำให้ไม่ถูกต้อง ตรวจสอบสิทธิ์ผู้ใช้อีกครั้งและขอความยินยอมจากผู้ใช้เพื่อรับโทเค็นใหม่ หากยังคงเห็นข้อผิดพลาดนี้ โปรดตรวจสอบว่าได้กำหนดค่าแอปพลิเคชันอย่างถูกต้อง และคุณใช้โทเค็นและพารามิเตอร์ที่ถูกต้องในคำขอ มิฉะนั้น บัญชีผู้ใช้อาจถูกลบหรือปิดใช้ ไปแล้ว
redirect_uri_mismatch
redirect_uri
ที่ส่งในคำขอการให้สิทธิ์ไม่ตรงกับ URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต
สำหรับรหัสไคลเอ็นต์ OAuth ตรวจสอบ URI การเปลี่ยนเส้นทางที่ได้รับอนุญาตใน
redirect_uri
ที่ส่งมาอาจไม่ถูกต้องสำหรับประเภทไคลเอ็นต์
พารามิเตอร์ redirect_uri
อาจอ้างอิงถึงโฟลว์ OAuth นอกแบนด์ (OOB) ที่
เลิกใช้งานแล้วและไม่รองรับอีกต่อไป โปรดดูคำแนะนำในการย้ายข้อมูลเพื่ออัปเดตการผสานรวม
invalid_request
คำขอที่คุณส่งมามีข้อผิดพลาด ซึ่งอาจเกิดจากสาเหตุหลายประการ ดังนี้
- คำขอมีรูปแบบไม่ถูกต้อง
- คำขอไม่มีพารามิเตอร์ที่จำเป็น
- คำขอใช้วิธีการให้สิทธิ์ที่ Google ไม่รองรับ ตรวจสอบว่าการผสานรวม OAuth ใช้วิธีการผสานรวมที่แนะนํา
- ใช้รูปแบบที่กำหนดเองสำหรับ URI การเปลี่ยนเส้นทาง : หากคุณเห็นข้อความแสดงข้อผิดพลาด แอป Chrome ไม่รองรับรูปแบบ URI ที่กำหนดเอง หรือ รูปแบบ URI ที่กำหนดเอง ไม่ได้เปิดใช้สำหรับไคลเอ็นต์ Android แสดงว่าคุณกำลังใช้ URI ที่กำหนดเอง ซึ่งแอป Chrome ไม่รองรับและปิดใช้โดยค่าเริ่มต้นใน Android ดูข้อมูลเพิ่มเติมเกี่ยวกับทางเลือกอื่นของ รูปแบบ URI ที่กำหนดเอง
ขั้นตอนที่ 4: จัดการการตอบกลับของเซิร์ฟเวอร์ OAuth 2.0
ลักษณะที่แอปพลิเคชันของคุณได้รับการตอบกลับการให้สิทธิ์จะขึ้นอยู่กับรูปแบบ URI การเปลี่ยนเส้นทางที่ใช้ ไม่ว่าจะเป็นรูปแบบใด การตอบกลับ
จะมีรหัสการให้สิทธิ์ (code
) หรือข้อผิดพลาด
(error
) เช่น error=access_denied
แสดงว่าผู้ใช้
ปฏิเสธคำขอ
หากผู้ใช้ให้สิทธิ์เข้าถึงแอปพลิเคชันของคุณ คุณสามารถแลกรหัสการให้สิทธิ์เป็นโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชได้ตามที่อธิบายไว้ในขั้นตอนถัดไป
ขั้นตอนที่ 5: แลกเปลี่ยนรหัสการให้สิทธิ์สำหรับโทเค็นรีเฟรชและโทเค็นเพื่อการเข้าถึง
หากต้องการแลกรหัสการให้สิทธิ์เป็นโทเค็นเพื่อการเข้าถึง ให้เรียกใช้ปลายทาง https://oauth2.googleapis.com/token
และตั้งค่าพารามิเตอร์ต่อไปนี้
ช่อง | |
---|---|
client_id |
รหัสไคลเอ็นต์ที่ได้รับจาก |
client_secret |
รหัสลับไคลเอ็นต์ที่ได้รับจาก |
code |
รหัสการให้สิทธิ์ที่แสดงผลจากคำขอเริ่มต้น |
code_verifier |
ตัวยืนยันรหัสที่คุณสร้างใน ขั้นตอนที่ 1 |
grant_type |
ตามที่กำหนดไว้ในข้อกำหนด OAuth 2.0 ค่าของช่องนี้ต้องตั้งเป็น authorization_code |
redirect_uri |
URI การเปลี่ยนเส้นทางรายการใดรายการหนึ่งที่แสดงสำหรับโปรเจ็กต์ของคุณใน
สำหรับ
client_id ที่ระบุ |
ข้อมูลโค้ดต่อไปนี้แสดงคำขอตัวอย่าง
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& client_secret=your_client_secret& redirect_uri=http://127.0.0.1:9004& grant_type=authorization_code
Google จะตอบกลับคำขอนี้โดยแสดงออบเจ็กต์ JSON ที่มีโทเค็นเพื่อการเข้าถึงแบบมีอายุสั้น และโทเค็นการรีเฟรช
คำตอบจะมีช่องต่อไปนี้
ช่อง | |
---|---|
access_token |
โทเค็นที่แอปพลิเคชันส่งเพื่อให้สิทธิ์คำขอ Google API |
expires_in |
อายุการใช้งานที่เหลือของโทเค็นเพื่อการเข้าถึงเป็นวินาที |
id_token |
หมายเหตุ: ระบบจะแสดงพร็อพเพอร์ตี้นี้ก็ต่อเมื่อคำขอของคุณมีขอบเขตข้อมูลระบุตัวตน
เช่น openid , profile หรือ email ค่าคือ JSON Web Token (JWT) ที่มีข้อมูลประจำตัวของผู้ใช้ซึ่งลงนามแบบดิจิทัล |
refresh_token |
โทเค็นที่คุณใช้เพื่อรับโทเค็นเพื่อการเข้าถึงใหม่ได้ โทเค็นการรีเฟรชจะใช้ได้จนกว่า ผู้ใช้จะเพิกถอนสิทธิ์เข้าถึงหรือโทเค็นการรีเฟรชจะหมดอายุ โปรดทราบว่าระบบจะส่งโทเค็นการรีเฟรชสำหรับแอปพลิเคชันที่ติดตั้งเสมอ |
refresh_token_expires_in |
อายุการใช้งานที่เหลือของโทเค็นการรีเฟรชเป็นวินาที ค่านี้จะตั้งค่าก็ต่อเมื่อผู้ใช้ให้สิทธิ์เข้าถึงตามเวลาเท่านั้น |
scope |
ขอบเขตการเข้าถึงที่ access_token มอบให้แสดงเป็นรายการของ
สตริงที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ซึ่งคั่นด้วยช่องว่าง |
token_type |
ประเภทของโทเค็นที่แสดงผล ในขณะนี้ ค่าของช่องนี้จะตั้งไว้เป็น Bearer เสมอ |
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการตอบกลับ
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/youtube.force-ssl", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
ขั้นตอนที่ 6: ตรวจสอบขอบเขตที่ผู้ใช้ให้สิทธิ์
เมื่อขอสิทธิ์ (ขอบเขต) หลายรายการ ผู้ใช้อาจไม่ให้สิทธิ์แอปของคุณเข้าถึง สิทธิ์ทั้งหมด แอปของคุณต้องยืนยันว่ามีการให้ขอบเขตใดบ้างจริง และจัดการสถานการณ์ที่ระบบปฏิเสธสิทธิ์บางอย่างอย่างเหมาะสม โดยปกติแล้วจะปิดใช้ฟีเจอร์ที่ต้องใช้ขอบเขตที่ถูกปฏิเสธเหล่านั้น
แต่ก็มีข้อยกเว้น แอป Google Workspace Enterprise ที่มี การมอบสิทธิ์ระดับโดเมน หรือแอปที่ทำเครื่องหมายเป็น เชื่อถือได้ จะข้ามหน้าจอขอความยินยอมให้สิทธิ์แบบละเอียด สำหรับแอปเหล่านี้ ผู้ใช้จะไม่เห็นหน้าจอคำยินยอมให้สิทธิ์แบบละเอียด แต่แอปของคุณจะได้รับขอบเขตที่ขอทั้งหมด หรือไม่ได้รับเลย
ดูข้อมูลโดยละเอียดเพิ่มเติมได้ที่ วิธีจัดการสิทธิ์แบบละเอียด
หากต้องการตรวจสอบว่าผู้ใช้ได้ให้สิทธิ์แอปพลิเคชันของคุณเข้าถึงขอบเขตใดขอบเขตหนึ่งหรือไม่ ให้
ตรวจสอบฟิลด์ scope
ในการตอบกลับโทเค็นเพื่อการเข้าถึง ขอบเขตการเข้าถึงที่ได้รับจาก
access_token ซึ่งแสดงเป็นรายการสตริงที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยมีช่องว่างคั่น
ตัวอย่างเช่น การตอบกลับโทเค็นเพื่อการเข้าถึงตัวอย่างต่อไปนี้บ่งชี้ว่าผู้ใช้ได้ให้สิทธิ์แก่แอปพลิเคชันของคุณในการดู แก้ไข และลบวิดีโอ YouTube การจัดประเภท ความคิดเห็น และคำบรรยายแทนเสียงของผู้ใช้เป็นการถาวร
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/youtube.force-ssl", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
การเรียก Google APIs
หลังจากที่แอปพลิเคชันได้รับโทเค็นเพื่อการเข้าถึงแล้ว คุณจะใช้โทเค็นเพื่อเรียก Google API ในนามของบัญชีผู้ใช้ที่ระบุได้ หากได้รับขอบเขตการเข้าถึงที่ API ต้องการ โดยให้ใส่โทเค็นเพื่อการเข้าถึงในคำขอไปยัง API โดยใส่พารามิเตอร์การค้นหา access_token
หรือค่าส่วนหัว HTTP Authorization
Bearer
หากเป็นไปได้ เราขอแนะนำให้ใช้ส่วนหัว HTTP เนื่องจากสตริงการค้นหามักจะปรากฏในบันทึกของเซิร์ฟเวอร์ ในกรณีส่วนใหญ่ คุณสามารถใช้ไลบรารีของไคลเอ็นต์เพื่อตั้งค่าการเรียกใช้ Google APIs ได้ (เช่น เมื่อเรียกใช้ YouTube Data API)
โปรดทราบว่า YouTube Data API รองรับบัญชีบริการสำหรับเจ้าของเนื้อหา YouTube ที่เป็นเจ้าของและจัดการช่อง YouTube หลายช่องเท่านั้น เช่น ค่ายเพลงและสตูดิโอภาพยนตร์
คุณลองใช้ Google APIs ทั้งหมดและดูขอบเขตของ API ได้ที่ OAuth 2.0 Playground
ตัวอย่าง HTTP GET
การเรียกไปยังปลายทาง
youtube.channels
(YouTube Data API) โดยใช้ส่วนหัว Authorization: Bearer
HTTP
อาจมีลักษณะดังนี้ โปรดทราบว่าคุณต้องระบุโทเค็นเพื่อการเข้าถึงของคุณเอง
GET /youtube/v3/channels?part=snippet&mine=true HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
ต่อไปนี้คือการเรียก API เดียวกันสำหรับผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์โดยใช้พารามิเตอร์สตริงการค้นหา access_token
GET https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true
ตัวอย่างของ curl
คุณทดสอบคำสั่งเหล่านี้ได้ด้วยแอปพลิเคชันบรรทัดคำสั่ง curl
ต่อไปนี้คือตัวอย่างที่ใช้ตัวเลือกส่วนหัว HTTP (แนะนำ)
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true
หรืออีกทางเลือกหนึ่งคือตัวเลือกพารามิเตอร์สตริงการค้นหา
curl https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true
การรีเฟรชโทเค็นเพื่อการเข้าถึง
โทเค็นเพื่อการเข้าถึงจะหมดอายุเป็นระยะๆ และกลายเป็นข้อมูลเข้าสู่ระบบที่ไม่ถูกต้องสำหรับคำขอ API ที่เกี่ยวข้อง คุณ สามารถรีเฟรชโทเค็นเพื่อการเข้าถึงได้โดยไม่ต้องแจ้งให้ผู้ใช้ขอสิทธิ์ (รวมถึงในกรณีที่ผู้ใช้ไม่ได้ อยู่) หากคุณขอสิทธิ์เข้าถึงแบบออฟไลน์ไปยังขอบเขตที่เชื่อมโยงกับโทเค็น
หากต้องการรีเฟรชโทเค็นการเข้าถึง แอปพลิเคชันของคุณจะส่งคำขอ HTTPS POST
ไปยังเซิร์ฟเวอร์การให้สิทธิ์ของ Google (https://oauth2.googleapis.com/token
) ซึ่งมีพารามิเตอร์ต่อไปนี้
ช่อง | |
---|---|
client_id |
รหัสไคลเอ็นต์ที่ได้จาก API Console |
client_secret |
รหัสลับไคลเอ็นต์ที่ได้รับจาก API Console
(client_secret ไม่มีผลกับคำขอจากไคลเอ็นต์ที่ลงทะเบียนเป็นแอปพลิเคชัน Android, iOS หรือ Chrome)
|
grant_type |
ตามที่กำหนดไว้ในข้อกำหนดเฉพาะของ OAuth 2.0 ค่าของช่องนี้ต้องตั้งเป็น refresh_token |
refresh_token |
โทเค็นการรีเฟรชที่ได้จากการแลกรหัสการให้สิทธิ์ |
ข้อมูลโค้ดต่อไปนี้แสดงคำขอตัวอย่าง
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& client_secret=your_client_secret& refresh_token=refresh_token& grant_type=refresh_token
ตราบใดที่ผู้ใช้ยังไม่ได้เพิกถอนสิทธิ์เข้าถึงที่ให้ไว้กับแอปพลิเคชัน เซิร์ฟเวอร์โทเค็น จะแสดงออบเจ็กต์ JSON ที่มีโทเค็นเพื่อการเข้าถึงใหม่ ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่าง การตอบกลับ
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "token_type": "Bearer" }
โปรดทราบว่ามีการจำกัดจำนวนโทเค็นการรีเฟรชที่จะออกให้ โดยจำกัด 1 รายการต่อ ชุดค่าผสมไคลเอ็นต์/ผู้ใช้ และอีก 1 รายการต่อผู้ใช้ในไคลเอ็นต์ทั้งหมด คุณควรบันทึกโทเค็นการรีเฟรช ไว้ในที่เก็บข้อมูลระยะยาวและใช้ต่อไปตราบใดที่โทเค็นยังคงใช้งานได้ หากแอปพลิเคชัน ขอโทเค็นการรีเฟรชมากเกินไป แอปพลิเคชันอาจถึงขีดจำกัดเหล่านี้ ในกรณีนี้ โทเค็นการรีเฟรชที่เก่ากว่า จะหยุดทำงาน
การเพิกถอนโทเค็น
ในบางกรณี ผู้ใช้อาจต้องการเพิกถอนสิทธิ์เข้าถึงที่ให้แก่แอปพลิเคชัน ผู้ใช้สามารถเพิกถอนสิทธิ์เข้าถึง ได้โดยไปที่ การตั้งค่าบัญชี ดูข้อมูลเพิ่มเติมได้ที่ส่วนนำสิทธิ์เข้าถึง เว็บไซต์หรือแอปออก ในเอกสารสนับสนุนของเว็บไซต์และแอปของบุคคลที่สามซึ่งมีสิทธิ์เข้าถึงบัญชีของคุณ
นอกจากนี้ แอปพลิเคชันยังเพิกถอนสิทธิ์เข้าถึงที่ได้รับโดยใช้โปรแกรมได้ด้วย การเพิกถอนแบบเป็นโปรแกรมมีความสำคัญในกรณีที่ผู้ใช้ยกเลิกการสมัครรับข้อมูล นำแอปพลิเคชันออก หรือทรัพยากร API ที่แอปต้องการมีการเปลี่ยนแปลงอย่างมาก กล่าวคือ ส่วนหนึ่งของกระบวนการนำออกอาจรวมถึงคำขอ API เพื่อให้แน่ใจว่าได้นำสิทธิ์ที่ มอบให้แอปพลิเคชันก่อนหน้านี้ออกแล้ว
หากต้องการเพิกถอนโทเค็นโดยอัตโนมัติ แอปพลิเคชันของคุณจะส่งคำขอไปยัง
https://oauth2.googleapis.com/revoke
และรวมโทเค็นเป็นพารามิเตอร์
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \ https://oauth2.googleapis.com/revoke?token={token}
โทเค็นอาจเป็นโทเค็นเพื่อการเข้าถึงหรือโทเค็นการรีเฟรชก็ได้ หากโทเค็นเป็นโทเค็นเพื่อการเข้าถึงและมี โทเค็นการรีเฟรชที่เกี่ยวข้อง ระบบจะเพิกถอนโทเค็นการรีเฟรชด้วย
หากการเพิกถอนดำเนินการสำเร็จ รหัสสถานะ HTTP ของการตอบกลับจะเป็น
200
สำหรับเงื่อนไขข้อผิดพลาด ระบบจะแสดงรหัสสถานะ HTTP 400
พร้อมกับรหัสข้อผิดพลาด
วิธีการเปลี่ยนเส้นทางแอป
รูปแบบ URI ที่กำหนดเอง (Android, iOS, UWP)
รูปแบบ URI ที่กำหนดเองเป็นรูปแบบหนึ่งของ Deep Link ที่ใช้รูปแบบที่กำหนดเองเพื่อเปิดแอป
ทางเลือกแทนการใช้รูปแบบ URI ที่กำหนดเองใน Android
ใช้ทางเลือกที่แนะนำ ซึ่งจะส่งการตอบกลับ OAuth 2.0 ไปยังแอปของคุณโดยตรง ทำให้ไม่จำเป็นต้องมี URI การเปลี่ยนเส้นทาง
วิธีย้ายข้อมูลไปยังไลบรารี Android ของ Google Identity Services
หากคุณใช้รูปแบบที่กำหนดเองสำหรับการผสานรวม OAuth ใน Android คุณจะต้อง ดำเนินการต่อไปนี้ให้เสร็จสมบูรณ์เพื่อย้ายข้อมูลไปใช้ไลบรารี Android ของบริการระบุตัวตนของ Google ที่แนะนำอย่างเต็มรูปแบบ
- อัปเดตรหัสเพื่อใช้ไลบรารี Android ของบริการระบุตัวตนของ Google
- ปิดใช้การรองรับสคีมที่กำหนดเองใน Google Cloud Console
ขั้นตอนต่อไปนี้จะอธิบายวิธีย้ายข้อมูลไปยังไลบรารี Android ของ Google Identity Services
-
อัปเดตรหัสเพื่อใช้ไลบรารี Android ของบริการระบุตัวตนของ Google โดยทำดังนี้
-
ตรวจสอบโค้ดเพื่อระบุตำแหน่งที่คุณส่งคำขอไปยังเซิร์ฟเวอร์ OAuth 2.0 ของ Google หากใช้สคีมที่กำหนดเอง คำขอจะมีลักษณะดังนี้
https://accounts.google.com/o/oauth2/v2/auth? scope=<SCOPES>& response_type=code& &state=<STATE>& redirect_uri=com.example.app:/oauth2redirect& client_id=<CLIENT_ID>
com.example.app:/oauth2redirect
คือ URI การเปลี่ยนเส้นทางของรูปแบบที่กำหนดเองใน ตัวอย่างด้านบน ดูรายละเอียดเพิ่มเติมเกี่ยวกับรูปแบบของค่าสคีม URI ที่กำหนดเองได้ที่คำจำกัดความพารามิเตอร์redirect_uri
-
จดบันทึกพารามิเตอร์คำขอ
scope
และclient_id
ซึ่ง คุณจะต้องกำหนดค่า Google Sign-In SDK -
ทำตามวิธีการ
ให้สิทธิ์เข้าถึงข้อมูลผู้ใช้ Google
เพื่อตั้งค่า SDK คุณข้ามขั้นตอนตั้งค่าโปรเจ็กต์ Google Cloud Console ได้เนื่องจากคุณจะใช้
client_id
ที่คุณดึงมาจากขั้นตอนก่อนหน้าซ้ำ -
ทำตามวิธีการใน
ขอสิทธิ์ที่จำเป็นสำหรับการดำเนินการของผู้ใช้ ซึ่งประกอบด้วยขั้นตอนต่อไปนี้
- ขอสิทธิ์จากผู้ใช้
-
ใช้เมธอด
getServerAuthCode
เพื่อเรียกข้อมูลรหัสการให้สิทธิ์สำหรับขอบเขตที่คุณขอสิทธิ์ - ส่งรหัสการให้สิทธิ์ไปยังแบ็กเอนด์ของแอปเพื่อแลกเป็นโทเค็นการเข้าถึงและโทเค็นรีเฟรช
- ใช้โทเค็นเพื่อการเข้าถึงที่เรียกข้อมูลมาเพื่อเรียก Google APIs ในนามของผู้ใช้
-
ตรวจสอบโค้ดเพื่อระบุตำแหน่งที่คุณส่งคำขอไปยังเซิร์ฟเวอร์ OAuth 2.0 ของ Google หากใช้สคีมที่กำหนดเอง คำขอจะมีลักษณะดังนี้
-
ปิดใช้การรองรับสคีมที่กำหนดเองในคอนโซล Google API โดยทำดังนี้
- ไปที่รายการข้อมูลเข้าสู่ระบบ OAuth 2.0 แล้วเลือกไคลเอ็นต์ Android
- ไปที่ส่วนการตั้งค่าขั้นสูง ยกเลิกการเลือกช่องทำเครื่องหมายเปิดใช้สกีม URI ที่กำหนดเอง แล้วคลิกบันทึกเพื่อปิดใช้การรองรับสกีม URI ที่กำหนดเอง
เปิดใช้สคีม URI ที่กำหนดเอง
หากทางเลือกอื่นที่แนะนำใช้ไม่ได้ คุณสามารถเปิดใช้รูปแบบ URI ที่กำหนดเองสำหรับไคลเอ็นต์ Android ได้โดยทำตามวิธีการด้านล่าง- ไปที่รายการข้อมูลเข้าสู่ระบบ OAuth 2.0 แล้วเลือกไคลเอ็นต์ Android
- ไปที่ส่วนการตั้งค่าขั้นสูง เลือกช่องทำเครื่องหมาย เปิดใช้รูปแบบ URI ที่กำหนดเอง แล้วคลิกบันทึกเพื่อเปิดใช้ การรองรับรูปแบบ URI ที่กำหนดเอง
ทางเลือกแทนการใช้รูปแบบ URI ที่กำหนดเองในแอป Chrome
ใช้ Chrome Identity API ซึ่งจะส่งการตอบกลับ OAuth 2.0 ไปยังแอปของคุณโดยตรง จึงไม่จำเป็นต้องใช้ URI การเปลี่ยนเส้นทาง
ที่อยู่ IP แบบ Loopback (macOS, Linux, เดสก์ท็อป Windows)
หากต้องการรับรหัสการให้สิทธิ์โดยใช้ URL นี้ แอปพลิเคชันของคุณต้องรับฟังใน เว็บเซิร์ฟเวอร์ในเครื่อง ซึ่งทำได้ในหลายแพลตฟอร์ม แต่ไม่ใช่ทุกแพลตฟอร์ม อย่างไรก็ตาม หากแพลตฟอร์ม รองรับ กลไกนี้เป็นกลไกที่แนะนำสำหรับการขอรับรหัสการให้สิทธิ์
เมื่อแอปได้รับการตอบกลับการให้สิทธิ์ เพื่อให้ใช้งานได้ดีที่สุด แอปควรตอบกลับโดย แสดงหน้า HTML ที่แนะนำให้ผู้ใช้ปิดเบราว์เซอร์และกลับไปที่แอปของคุณ
การใช้งานที่แนะนำ | แอปเดสก์ท็อป macOS, Linux และ Windows (แต่ไม่ใช่ Universal Windows Platform) |
ค่าแบบฟอร์ม | ตั้งค่าประเภทแอปพลิเคชันเป็นแอปบนเดสก์ท็อป |
คัดลอก/วางด้วยตนเอง (เลิกใช้งานแล้ว)
ปกป้องแอปของคุณ
ยืนยันการเป็นเจ้าของแอป (Android, Chrome)
คุณยืนยันการเป็นเจ้าของแอปพลิเคชันเพื่อลดความเสี่ยงของการแอบอ้างเป็นแอปได้
Android
หากต้องการดำเนินการยืนยันให้เสร็จสมบูรณ์ คุณสามารถใช้บัญชีนักพัฒนาแอป Google Play หากมี และแอปของคุณลงทะเบียนใน Google Play Console คุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้เพื่อให้การยืนยันสำเร็จ
- คุณต้องมีแอปพลิเคชันที่ลงทะเบียนใน Google Play Console โดยใช้ชื่อแพ็กเกจและลายนิ้วมือสำหรับใบรับรองที่ลงนาม SHA-1 เดียวกันกับไคลเอ็นต์ OAuth ของ Android ที่คุณกำลังยืนยัน
- คุณต้องมีสิทธิ์ผู้ดูแลระบบสำหรับแอปใน Google Play Console ดูข้อมูลเพิ่มเติม เกี่ยวกับการจัดการการเข้าถึงใน Google Play Console
ในส่วนยืนยันการเป็นเจ้าของแอปของไคลเอ็นต์ Android ให้คลิกปุ่ม ยืนยันการเป็นเจ้าของเพื่อดำเนินการยืนยันให้เสร็จสมบูรณ์
หากการยืนยันสำเร็จ ระบบจะแสดงการแจ้งเตือนเพื่อยืนยันว่ากระบวนการยืนยัน สำเร็จ ไม่เช่นนั้นระบบจะแสดงข้อความแจ้งข้อผิดพลาด
หากต้องการแก้ไขการยืนยันที่ไม่สำเร็จ ให้ลองทำดังนี้
- ตรวจสอบว่าแอปที่คุณกำลังยืนยันเป็นแอปที่ลงทะเบียนใน Google Play Console
- ตรวจสอบว่าคุณมีสิทธิ์ระดับผู้ดูแลระบบสำหรับแอปใน Google Play Console
Chrome
หากต้องการทําตามกระบวนการยืนยันให้เสร็จสมบูรณ์ คุณจะต้องใช้บัญชีนักพัฒนาแอปของ Chrome เว็บสโตร์ คุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้จึงจะยืนยันตัวตนได้สำเร็จ
- คุณต้องมีรายการที่ลงทะเบียนในแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ Chrome เว็บสโตร์ที่มีรหัสรายการเดียวกันกับไคลเอ็นต์ OAuth ของส่วนขยาย Chrome ที่คุณกำลังทำการยืนยันให้เสร็จสมบูรณ์
- คุณต้องเป็นผู้เผยแพร่รายการใน Chrome เว็บสโตร์ ดูข้อมูลเพิ่มเติม เกี่ยวกับการจัดการการเข้าถึงในแดชบอร์ดสำหรับนักพัฒนาแอป Chrome เว็บสโตร์
ในส่วนยืนยันการเป็นเจ้าของแอปของไคลเอ็นต์ส่วนขยาย Chrome ให้คลิก ปุ่มยืนยันการเป็นเจ้าของเพื่อทําขั้นตอนการยืนยันให้เสร็จสมบูรณ์
หมายเหตุ: โปรดรอสักครู่ก่อนที่จะดำเนินการยืนยันให้เสร็จสมบูรณ์หลังจาก ให้สิทธิ์เข้าถึงบัญชี
หากการยืนยันสำเร็จ ระบบจะแสดงการแจ้งเตือนเพื่อยืนยันว่ากระบวนการยืนยัน สำเร็จ ไม่เช่นนั้นระบบจะแสดงข้อความแจ้งข้อผิดพลาด
หากต้องการแก้ไขการยืนยันที่ไม่สำเร็จ ให้ลองทำดังนี้
- ตรวจสอบว่ามีรายการที่ลงทะเบียนในแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ Chrome เว็บสโตร์ที่มี รหัสรายการเดียวกันกับไคลเอ็นต์ OAuth ของส่วนขยาย Chrome ที่คุณกำลังยืนยัน
- ตรวจสอบว่าคุณเป็นผู้เผยแพร่แอป นั่นคือคุณต้องเป็นผู้เผยแพร่แอปรายบุคคลหรือเป็นสมาชิกของผู้เผยแพร่แอปแบบกลุ่ม ดูข้อมูลเพิ่มเติม เกี่ยวกับการจัดการการเข้าถึงในแดชบอร์ดสำหรับนักพัฒนาแอปของ Chrome เว็บสโตร์
- หากเพิ่งอัปเดตรายชื่อผู้เผยแพร่เนื้อหาในกลุ่ม ให้ตรวจสอบว่ารายชื่อสมาชิกผู้เผยแพร่เนื้อหาในกลุ่ม ซิงค์อยู่ในแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ Chrome เว็บสโตร์ ดูข้อมูลเพิ่มเติม เกี่ยวกับการซิงค์รายชื่อสมาชิกของผู้เผยแพร่โฆษณา
App Check (iOS เท่านั้น)
ฟีเจอร์ App Check ช่วยปกป้องแอปพลิเคชัน iOS จากการใช้งานที่ไม่ได้รับอนุญาตโดยใช้บริการ App Attest ของ Apple เพื่อยืนยันว่าคำขอที่ส่งไปยังปลายทาง OAuth 2.0 ของ Google มาจากแอปพลิเคชันที่ถูกต้องของคุณ ซึ่งจะช่วย ลดความเสี่ยงในการแอบอ้างเป็นแอป
เปิดใช้ App Check สำหรับไคลเอ็นต์ iOS
คุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้จึงจะเปิดใช้ App Check สำหรับไคลเอ็นต์ iOS ได้สำเร็จ- คุณต้องระบุรหัสทีมสำหรับไคลเอ็นต์ iOS
- คุณต้องไม่ใช้ไวลด์การ์ดในรหัสชุดเนื่องจากอาจเชื่อมโยงกับแอปมากกว่า 1 แอป ซึ่งหมายความว่ารหัสชุดต้องไม่มีสัญลักษณ์ดอกจัน (*)
หลังจากเปิดใช้ App Check คุณจะเริ่มเห็นเมตริกที่เกี่ยวข้องกับคำขอ OAuth จากไคลเอ็นต์ในมุมมองแก้ไขของไคลเอ็นต์ OAuth ระบบจะไม่บล็อกคำขอจากแหล่งที่มาที่ไม่ได้ยืนยัน จนกว่าคุณจะบังคับใช้ App Check ข้อมูลในหน้าการตรวจสอบเมตริกจะช่วยให้คุณทราบเวลาที่ควรเริ่มการบังคับใช้
คุณอาจเห็นข้อผิดพลาดที่เกี่ยวข้องกับฟีเจอร์ App Check เมื่อเปิดใช้ App Check สำหรับแอป iOS ของคุณ หากต้องการ แก้ไขข้อผิดพลาดเหล่านี้ ให้ลองทำดังนี้
- ตรวจสอบว่า Bundle ID และ Team ID ที่คุณระบุนั้นถูกต้อง
- ตรวจสอบว่าคุณไม่ได้ใช้ไวลด์การ์ดสำหรับ Bundle ID
บังคับใช้ App Check สำหรับไคลเอ็นต์ iOS
การเปิดใช้ App Check สำหรับแอปไม่ได้เป็นการบล็อกคำขอที่ไม่รู้จักโดยอัตโนมัติ หากต้องการบังคับใช้ การป้องกันนี้ ให้ไปที่มุมมองแก้ไขของไคลเอ็นต์ iOS คุณจะเห็นเมตริก App Check ทางด้านขวาของหน้าในส่วนข้อมูลประจำตัว Google สำหรับ iOS เมตริกประกอบด้วยข้อมูลต่อไปนี้- จำนวนคำขอที่ยืนยันแล้ว - คำขอที่มีโทเค็น App Check ที่ถูกต้อง หลังจากที่คุณ เปิดใช้การบังคับใช้ App Check แล้ว จะมีเพียงคำขอในหมวดหมู่นี้เท่านั้นที่จะสำเร็จ
- จำนวนคำขอที่ยังไม่ยืนยัน: คำขอของไคลเอ็นต์ที่น่าจะล้าสมัย - คำขอที่ไม่มีโทเค็น App Check คำขอเหล่านี้อาจมาจากแอปเวอร์ชันเก่าที่ไม่มีการติดตั้งใช้งาน App Check
- จำนวนคำขอที่ยังไม่ยืนยัน: คำขอที่ไม่ทราบต้นทาง - คำขอที่ไม่มีโทเค็น App Check ซึ่งดูเหมือนว่าจะไม่ได้มาจากแอปของคุณ
- จำนวนคำขอที่ยังไม่ยืนยัน: คำขอที่ไม่ถูกต้อง - คำขอที่มีโทเค็น App Check ไม่ถูกต้อง ซึ่งอาจเป็นเพราะมีไคลเอ็นต์ที่ไม่น่าไว้วางใจพยายามแอบอ้างแอปของคุณ หรือเพราะ สภาพแวดล้อมที่จำลอง
หากต้องการบังคับใช้ App Check ให้คลิกปุ่มบังคับใช้และยืนยันตัวเลือก เมื่อการบังคับใช้ มีผลแล้ว ระบบจะปฏิเสธคำขอที่ยังไม่ยืนยันทั้งหมดจากไคลเอ็นต์ของคุณ
หมายเหตุ: หลังจากเปิดใช้การบังคับใช้แล้ว ระบบอาจใช้เวลาถึง 15 นาทีเพื่อให้การเปลี่ยนแปลงมีผล
ยกเลิกการบังคับใช้ App Check สำหรับไคลเอ็นต์ iOS
การยกเลิกการบังคับใช้ App Check สำหรับแอปจะหยุดการบังคับใช้และ จะอนุญาตคำขอทั้งหมดจากไคลเอ็นต์ไปยังปลายทาง OAuth 2.0 ของ Google รวมถึงคำขอที่ยังไม่ยืนยัน
หากต้องการยกเลิกการบังคับใช้ App Check สำหรับไคลเอ็นต์ iOS ให้ไปที่มุมมองแก้ไขของไคลเอ็นต์ iOS แล้ว คลิกปุ่มยกเลิกการบังคับใช้และยืนยันตัวเลือก
หมายเหตุ: หลังจากยกเลิกการบังคับใช้ App Check การเปลี่ยนแปลงอาจใช้เวลาถึง 15 นาทีจึงจะมีผล
ปิดใช้ App Check สำหรับไคลเอ็นต์ iOS
การปิดใช้ App Check สำหรับแอปจะหยุดการตรวจสอบ App Check ทั้งหมดและการบังคับใช้ ลองไม่บังคับใช้ App Check แทนเพื่อให้คุณตรวจสอบเมตริกสำหรับไคลเอ็นต์ต่อไปได้
หากต้องการปิดใช้ App Check สำหรับไคลเอ็นต์ iOS ให้ไปที่มุมมองแก้ไขของไคลเอ็นต์ iOS แล้วปิดปุ่มสลับปกป้องไคลเอ็นต์ OAuth จากการละเมิดด้วย Firebase App Check
หมายเหตุ: หลังจากปิดใช้ App Check การเปลี่ยนแปลงอาจใช้เวลาถึง 15 นาทีจึงจะมีผล
การเข้าถึงตามเวลา
สิทธิ์เข้าถึงตามเวลาช่วยให้ผู้ใช้สามารถให้สิทธิ์แอปของคุณเข้าถึงข้อมูลของตนเองในช่วงระยะเวลาจำกัด เพื่อดำเนินการให้เสร็จสมบูรณ์ สิทธิ์เข้าถึงตามเวลาจะพร้อมใช้งานในผลิตภัณฑ์บางอย่างของ Google ในระหว่างขั้นตอนความยินยอม เพื่อให้ผู้ใช้มีตัวเลือกในการให้สิทธิ์เข้าถึงในช่วงระยะเวลาที่จำกัด ตัวอย่างเช่น Data Portability API ซึ่งช่วยให้โอนข้อมูลได้แบบครั้งเดียว
เมื่อผู้ใช้ให้สิทธิ์เข้าถึงแอปพลิเคชันของคุณตามระยะเวลาที่กำหนด โทเค็นเพื่อการรีเฟรชจะหมดอายุหลังจาก
ระยะเวลาที่ระบุ โปรดทราบว่าโทเค็นการรีเฟรชอาจใช้ไม่ได้ก่อนหน้านี้ในบางกรณี
โปรดดูรายละเอียดในกรณีเหล่านี้
ฟิลด์ refresh_token_expires_in
ที่แสดงในการตอบกลับการแลกเปลี่ยนรหัสการให้สิทธิ์ จะแสดงเวลาที่เหลือจนกว่าโทเค็นการรีเฟรชจะหมดอายุในกรณีดังกล่าว
อ่านเพิ่มเติม
แนวทางปฏิบัติแนะนำปัจจุบันของ IETF OAuth 2.0 สำหรับ แอปเนทีฟได้กำหนดแนวทางปฏิบัติแนะนำหลายอย่างที่บันทึกไว้ที่นี่
การติดตั้งใช้งานการป้องกันแบบครอบคลุมหลายบริการ
อีกขั้นตอนหนึ่งที่คุณควรทำเพื่อปกป้องบัญชีของผู้ใช้คือการใช้การปกป้องข้ามบัญชีโดยใช้บริการการปกป้องข้ามบัญชีของ Google บริการนี้ช่วยให้คุณ สมัครรับการแจ้งเตือนเหตุการณ์ด้านความปลอดภัยซึ่งจะให้ข้อมูลแก่แอปพลิเคชันของคุณเกี่ยวกับการเปลี่ยนแปลงที่สำคัญในบัญชีผู้ใช้ จากนั้นคุณสามารถใช้ข้อมูลดังกล่าวเพื่อดำเนินการตามวิธีที่คุณเลือกตอบสนองต่อเหตุการณ์
ตัวอย่างประเภทเหตุการณ์ที่บริการการปกป้องข้ามบัญชีของ Google ส่งไปยังแอปของคุณมีดังนี้
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
-
https://schemas.openid.net/secevent/oauth/event-type/token-revoked
-
https://schemas.openid.net/secevent/risc/event-type/account-disabled
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้การป้องกันแบบครอบคลุมหลายบริการและรายการเหตุการณ์ทั้งหมดที่ใช้ได้ใน หน้าปกป้องบัญชีผู้ใช้ด้วยการป้องกันแบบครอบคลุมหลายบริการ