ย้ายจาก ClientLogin ไปยัง OAuth 2.0

อิกาลัน YouTube Developer Relations – June 2013

API ของ YouTube ใช้ OAuth 2.0 เพื่อให้สิทธิ์คําขอของผู้ใช้ เรามักจะถามเราว่าจะเพิ่มการรองรับการตรวจสอบสิทธิ์ ClientLogin หรือมีสิ่งใดที่คล้ายกันใน YouTube API หรือไม่ อย่างไรก็ตาม เราได้เลิกใช้งาน ClientLogin อย่างเป็นทางการในวันที่ 20 เมษายน 2012 และก็ไม่มีแผนที่จะเพิ่มกลไกดังกล่าว

มีเหตุผลหลายประการที่ทําให้เราเชื่อว่าการสนับสนุนขั้นตอนการให้สิทธิ์ OAuth 2.0 รูปแบบต่างๆ สําหรับผู้ใช้ YouTube ทําได้ดีกว่า ClientLogin ขั้นตอนเหล่านี้รองรับกรณีการใช้งานสําหรับแอปพลิเคชันบนเดสก์ท็อป แอปพลิเคชันบนเว็บเท่านั้น แอปพลิเคชันที่มาพร้อมอุปกรณ์เคลื่อนที่ หรือแม้แต่แอปพลิเคชันที่ทํางานในอุปกรณ์อย่างเช่นโทรทัศน์ที่ไม่มีกลไกการป้อนข้อมูลที่ซับซ้อน ซึ่งเป็นสิ่งที่ทําได้ยากโดยใช้ ClientLogin เรายังพบว่า ClientLogin ทําให้เกิดอาการปวดหัวหลังการเปิดตัวให้กับนักพัฒนาซอฟต์แวร์จํานวนมาก ซึ่งบางรายเราได้อธิบายไว้ในบล็อกโพสต์ ClientLogin #FAIL

การใช้ OAuth 2.0 สําหรับสคริปต์แบบสแตนด์อโลนฝั่งเซิร์ฟเวอร์

นักพัฒนาซอฟต์แวร์จํานวนมากใช้ ClientLogin เพื่อให้สิทธิ์สคริปต์บรรทัดคําสั่งที่ทํางานในเซิร์ฟเวอร์โดยไม่มีเบราว์เซอร์ สําหรับ OAuth 2.0 แทบจะมีเบราว์เซอร์ให้เกี่ยวข้องกันเสมอ ยกเว้นเมื่อคุณใช้งานแอปพลิเคชัน Android ที่ใช้ Google Play Services เพื่อดึงข้อมูลโทเค็นผ่าน GoogleAuthUtil.

ในขั้นตอนแบบเว็บเท่านั้น เว็บไซต์ที่ต้องการเรียก API ที่ตรวจสอบสิทธิ์แล้วในนามของผู้ใช้จะต้องเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการตรวจสอบสิทธิ์ google.com ซึ่งจะอธิบายสิ่งที่แอปพลิเคชันพยายามเข้าถึง จากนั้นเว็บแอปพลิเคชันจะได้รับโทเค็นที่ใช้เพื่อเรียก API จากนั้นผู้ใช้ก็จะเพิกถอนสิทธิ์เข้าถึงของแอปพลิเคชันได้ทุกเมื่อโดยใช้หน้า connected apps and sites

ตัวอย่างโค้ด Python ของเราแสดงวิธีที่สคริปต์บรรทัดคําสั่งเรียกใช้เบราว์เซอร์และการเรียก API จากหน้าต่างเทอร์มินัล สร้างเซิร์ฟเวอร์ภายในเพื่อฟังโค้ดหลังจากการเปลี่ยนเส้นทางการให้สิทธิ์ และบันทึกโทเค็นสําหรับการเรียก API ในอนาคตโดยอัตโนมัติ ดูวิดีโอของการดําเนินการที่ด้านล่าง

โทเค็นที่ใช้เป็นสตริง ASCII หากเป็นโทเค็น offline คุณจะพกพาได้ เมื่อใช้โทเค็นที่ดึงมา คุณจะสามารถเรียกใช้สคริปต์บนเดสก์ท็อป แล้วคัดลอกและเขียนโค้ดบนเซิร์ฟเวอร์ระยะไกลที่ไม่มี GUI ได้ หากโค้ดนั้นสร้างอินสแตนซ์ไคลเอ็นต์ OAuth 2.0 ด้วยรหัสไคลเอ็นต์และข้อมูลลับเดียวกัน นอกเหนือจาก Python แล้ว ไลบรารีของไคลเอ็นต์ Google API สําหรับภาษาโปรแกรมอื่นๆ ยังเสนอวิธีการช่วยเหลือสําหรับการจัดการโทเค็น ซึ่งแชร์ระหว่างไคลเอ็นต์และแม้แต่ใช้ในไลบรารี HTTP ระดับล่างได้โดยตรงในส่วนหัวไคลเอ็นต์หรือเป็นพารามิเตอร์ URL

ตัวอย่างสคริปต์ฝั่งเซิร์ฟเวอร์ที่ใช้โทเค็นออฟไลน์

  • Daemon ที่ตรวจสอบไดเรกทอรีสําหรับวิดีโอใหม่เพื่ออัปโหลดไปยัง YouTube โดยอัตโนมัติ
  • งาน Cron ที่อัปเดตเพลย์ลิสต์ทุกวันด้วยเนื้อหาใหม่
  • สคริปต์ที่ตรวจสอบข้อมูลวิดีโอผ่าน YouTube Analytics API และแจ้งผู้จัดการช่องเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น เช่น เวลาในการรับชมรวมเกินขีดจํากัด ในกรณีนี้ OAuth 2.0 เป็นวิธีการให้สิทธิ์เพียงวิธีเดียวที่รองรับ เนื่องจาก Analytics API ไม่รองรับ ClientLogin

ส่วนโทเค็นเพื่อการเข้าถึงที่ใช้ได้นานจะให้รายละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้างโทเค็นออฟไลน์ที่สามารถใช้กับกระบวนการฝั่งเซิร์ฟเวอร์

แนวทางปฏิบัติแนะนําเกี่ยวกับรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์

โค้ดทั้งหมดที่ใช้รหัสไคลเอ็นต์และคู่ข้อมูลลับเดียวกันจะใช้โทเค็นเพื่อการเข้าถึงเดียวกันได้ วิธีที่ดีที่สุดคือการจํากัดการเข้าถึงรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ไปยังโค้ดที่ทํางานในเครื่องและอุปกรณ์ภายในองค์กร

อย่าใส่รหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ไว้ในโค้ดของแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ นักพัฒนาแอปทุกรายที่ตรวจสอบสิทธิ์ OAuth 2.0 จากอุปกรณ์เคลื่อนที่ควรใช้รหัสไคลเอ็นต์ "แอปพลิเคชันที่ติดตั้งไว้" ซึ่งจะขอข้อมูลเพิ่มเติมเพื่อยืนยันว่าคําขอดังกล่าวมาจากแอปพลิเคชันที่เผยแพร่โดยทีมของคุณเท่านั้น

ในอุปกรณ์ Android ระบบจะไม่ใช้แอปพลิเคชันแทนทั้งรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์โดยใช้ชื่อแพ็กเกจและแฮชใบรับรองผสมกัน ในอุปกรณ์ iOS ระบบจะใช้รหัสชุดและรหัส App Store ดูเอกสารอย่างเป็นทางการเกี่ยวกับการดึงข้อมูลนี้ได้ที่หน้าความช่วยเหลือ Google API Console

บัญชีบริการใช้ไม่ได้กับ YouTube API

บัญชีบริการใช้ไม่ได้กับการเรียก YouTube Data API เนื่องจากบัญชีบริการต้องมีช่อง YouTube ที่เกี่ยวข้อง และคุณจะเชื่อมโยงช่องใหม่หรือช่องที่มีอยู่กับบัญชีบริการไม่ได้ หากคุณใช้บัญชีบริการเพื่อเรียก YouTube Data API เซิร์ฟเวอร์ API จะแสดงข้อผิดพลาดโดยตั้งค่าประเภทข้อผิดพลาดเป็น unauthorized และเหตุผลที่ตั้งค่าเป็น youtubeSignupRequired

การเข้าถึง API ของ YouTube แบบออฟไลน์/เป็นเวลานาน

OAuth 2.0 มีโทเค็นที่มีอายุสั้นและโทเค็นที่ใช้งานได้นาน สําหรับการดําเนินการแบบครั้งเดียว โทเค็นเพื่อการเข้าถึงที่มีอายุสั้นเป็นตัวเลือกที่ดีที่สุด โทเค็นเหล่านี้จะหมดอายุในไม่ช้าหลังจากการให้สิทธิ์ สําหรับงานที่ยาวนาน คุณอาจต้องหาโทเค็นการรีเฟรชที่ใช้เพื่อดึงข้อมูลโทเค็นเพื่อการเข้าถึงที่ใช้ได้ในระยะสั้น

หากต้องการตรวจสอบว่าแอปพลิเคชันของคุณได้รับโทเค็นการรีเฟรชที่ใช้ได้นานและไม่ใช่โทเค็นการเข้าถึงที่ใช้ได้นาน ให้ใช้ขั้นตอน "แอปพลิเคชันที่ติดตั้ง" เมื่อสร้างรหัสไคลเอ็นต์ และเลือก Other สําหรับค่า "Type application application"

เราขอแนะนําให้คุณใช้ขั้นตอน "แอปพลิเคชันที่ติดตั้ง" สําหรับกรณีการใช้งานนี้ หากใช้งาน YouTube API ในแอปพลิเคชันเว็บแอปพลิเคชันได้นานแล้ว คุณสามารถเรียก API ได้โดยการตั้งค่าพารามิเตอร์ access_type เป็น offline และพารามิเตอร์ approval_prompt เป็น force ในคําขอสิทธิ์เริ่มต้นหรือการกําหนดค่าไคลเอ็นต์ ไลบรารีของไคลเอ็นต์บางรายการจะจัดการการดึงข้อมูลและรีเฟรชโทเค็นเพื่อการเข้าถึง หากคุณสนใจเขียนโค้ดการให้สิทธิ์ที่กําหนดเอง เราได้เผยแพร่บล็อกโพสต์ในบล็อก Google Code ที่คุณใช้เป็นฐานสําหรับโค้ดได้

การใช้ OAuth 2.0 กับโทรศัพท์ แท็บเล็ต และอุปกรณ์อื่นๆ

เมื่อเขียนแอปพลิเคชัน Android นักพัฒนาแอปสามารถใช้ประโยชน์จาก Google Play services เพื่อจัดการรายละเอียดการให้สิทธิ์ บริการ Google Play มีขั้นตอนการให้สิทธิ์มาตรฐานสําหรับ Google APIs ทั้งหมด ซึ่งรวมถึง API สําหรับแพลตฟอร์ม YouTube วิธีนี้จะมอบประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้นให้แก่ผู้ใช้แอปพลิเคชัน Android ของคุณมากกว่าการตรวจสอบสิทธิ์ที่กําหนดเองโดยใช้ ClientLogin

ในอุปกรณ์ iOS นั้น Google มี 2 ตัวเลือก ได้แก่

  • Google+ Platform for iOS ซึ่งรวมการลงชื่อเข้าใช้ผลิตภัณฑ์ของ Google และเปิดใช้ฟีเจอร์โซเชียลไว้ด้วย
  • gtm-oauth2 toolkit ซึ่งมอบ UIWebView การให้สิทธิ์และจัดการโทเค็น

เราขอแนะนําให้ใช้ OAuth 2.0 สําหรับอุปกรณ์ สําหรับอุปกรณ์ที่ทําหน้าที่เป็นอุปกรณ์ "หน้าจอที่ 2" หรือทีวี เช่น ทีวีที่ไม่มีกลไกการป้อนข้อมูลที่ใช้งานง่าย OAuth 2.0 สําหรับอุปกรณ์ทํางานโดยการนําเสนอรหัสที่ไม่ซ้ํากันให้แก่ผู้ใช้เมื่อต้องมีคําขอการให้สิทธิ์ ในตอนนี้ ระบบจะขอให้ผู้ใช้เรียกดู http://google.com/device ในอุปกรณ์อื่น เช่น แล็ปท็อปหรือโทรศัพท์ และป้อนรหัสที่ไม่ซ้ํากัน แอปพลิเคชันนําเสนอหน้าจอที่มีลักษณะดังนี้

ขณะที่ผู้ใช้ป้อนรหัสในอุปกรณ์อื่น แอปพลิเคชันจะแบบสํารวจเป็นระยะๆ เพื่อดูว่าได้ป้อนรหัสหรือไม่ เมื่อเปิดใช้แล้ว ระบบจะเรียกโทเค็นสําหรับการเรียกใช้ API หากต้องการดูการใช้งานจริง โปรดดูการสาธิต ซึ่งเรียกใช้ในอุปกรณ์ที่เปิดใช้เว็บได้ API เองนั้นทํางานได้กับทุกแพลตฟอร์ม ทําให้อุปกรณ์ที่ไม่มีความสามารถในการแสดงผลเว็บมีประโยชน์ เราได้โพสต์โค้ดตัวอย่างใน Python เพื่อเป็นการสาธิตการใช้งานเพื่อเป็นข้อมูลอ้างอิง

สรุป

การให้สิทธิ์ OAuth 2.0 ช่วยให้นักพัฒนาซอฟต์แวร์ที่ต้องการสิทธิ์ YouTube มีความยืดหยุ่น นักพัฒนาซอฟต์แวร์ที่คุ้นเคยกับ ClientLogin อาจพบว่าการตั้งค่าแอปพลิเคชันให้ใช้ OAuth 2.0 ต้องใช้เวลาเพิ่มขึ้นเล็กน้อยในการเริ่มต้นใช้งาน แต่เมื่อย้ายแล้ว แอปพลิเคชัน OAuth 2.0 จะให้ความยืดหยุ่น การรักษาความปลอดภัย และความสามารถในการใช้งานข้ามแพลตฟอร์มเพิ่มเติมสําหรับผู้ใช้ปลายทางมากขึ้น

หากมีข้อสงสัยเพิ่มเติมเกี่ยวกับ OAuth 2.0 หรือตัวอย่างในบทความนี้ โปรดติดต่อสอบถามด้วยแท็ก youtube-api ใน StackOverflow