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