Ikai Lan, YouTube Developer Relations – June 2013
YouTube API ใช้ OAuth 2.0 เพื่อให้สิทธิ์คำขอของผู้ใช้ เรามักถูกถามว่าจะเพิ่มการรองรับClientLoginการตรวจสอบสิทธิ์หรือสิ่งที่คล้ายกันใน YouTube API ต่อไปหรือไม่ อย่างไรก็ตาม เราเลิกใช้งานอย่างเป็นทางการClientLoginตั้งแต่วันที่ 20 เมษายน 2012 และไม่มีแผนที่จะเพิ่มกลไกดังกล่าว
เราเชื่อว่าการรองรับขั้นตอนการให้สิทธิ์ OAuth 2.0 ต่างๆ จะเป็นประโยชน์ต่อผู้ใช้ YouTube มากกว่า ClientLogin ด้วยเหตุผลหลายประการ ขั้นตอนเหล่านี้รองรับกรณีการใช้งานสำหรับแอปพลิเคชันบนเดสก์ท็อป แอปพลิเคชันบนเว็บเท่านั้น แอปพลิเคชันบนอุปกรณ์เคลื่อนที่ และแม้แต่แอปพลิเคชันที่ทำงานบนอุปกรณ์ต่างๆ เช่น โทรทัศน์ที่ไม่มีกลไกการป้อนข้อมูลที่ซับซ้อน ซึ่งเป็นสิ่งที่ทำได้ยากเมื่อใช้ ClientLogin นอกจากนี้ เรายังพบว่า ClientLogin ทำให้เกิดปัญหาปวดหัวมากขึ้นหลังการเปิดตัวสำหรับนักพัฒนาแอปหลายๆ ราย
การใช้ 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 Cloud console
บัญชีบริการใช้กับ YouTube API ไม่ได้
บัญชีบริการใช้ไม่ได้กับการเรียก YouTube Data API เนื่องจากบัญชีบริการต้องมีช่อง YouTube ที่เชื่อมโยง และคุณไม่สามารถเชื่อมโยงช่องใหม่หรือช่องที่มีอยู่กับบัญชีบริการได้ หากคุณใช้บัญชีบริการเพื่อเรียก YouTube Data API เซิร์ฟเวอร์ API จะแสดงข้อผิดพลาดโดยตั้งค่าประเภทข้อผิดพลาดเป็น unauthorized และตั้งค่าเหตุผลเป็น youtubeSignupRequired
สิทธิ์เข้าถึง YouTube API แบบออฟไลน์/ระยะยาว
OAuth 2.0 มีโทเค็นอายุสั้นและโทเค็นอายุยาว สำหรับปฏิบัติการแบบครั้งเดียว โทเค็นเพื่อการเข้าถึงที่มีอายุสั้นเป็นตัวเลือกที่ดีที่สุด โทเค็นเหล่านี้จะหมดอายุในเวลาอันสั้นหลังจากที่ได้รับ สำหรับงานที่ใช้เวลานาน คุณอาจต้องพิจารณาขอโทเค็นการรีเฟรช ซึ่งใช้เพื่อดึงโทเค็นเพื่อการเข้าถึงที่ใช้ได้ในระยะสั้น
หากต้องการให้แอปพลิเคชันได้รับโทเค็นการรีเฟรชที่มีอายุยาวนานและไม่ใช่โทเค็นเพื่อการเข้าถึงที่มีอายุสั้น ให้ใช้โฟลว์ "แอปพลิเคชันที่ติดตั้ง" เมื่อสร้างรหัสไคลเอ็นต์ และเลือก Other สำหรับค่า "ประเภทแอปพลิเคชันที่ติดตั้ง"

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

ในอุปกรณ์ iOS ทาง Google มีตัวเลือกให้ 2 แบบ ดังนี้
- Google+ Platform for iOS ซึ่งผสานรวมการลงชื่อเข้าใช้ผลิตภัณฑ์ของ Google และยังเปิดใช้ฟีเจอร์โซเชียลด้วย
- gtm-oauth2 toolkit ซึ่งให้UIWebViewการให้สิทธิ์และจัดการโทเค็น
สำหรับอุปกรณ์ที่ออกแบบมาให้ทำหน้าที่เป็นอุปกรณ์ "หน้าจอที่ 2" หรืออุปกรณ์อย่างเช่นโทรทัศน์ที่ไม่มีกลไกการป้อนข้อมูลที่ใช้งานง่าย OAuth 2.0 สำหรับอุปกรณ์คือแนวทางที่แนะนำ 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