Ikai Lan, YouTube Developer Relations – June 2013
API YouTube sử dụng OAuth 2.0 để uỷ quyền cho các yêu cầu của người dùng. Chúng tôi thường nhận được câu hỏi về việc liệu chúng tôi có hỗ trợ thêm tính năng xác thực ClientLogin hoặc tính năng tương tự trong các API của YouTube trong tương lai hay không. Tuy nhiên, chúng tôi chính thức ngừng sử dụng ClientLogin kể từ ngày 20 tháng 4 năm 2012 và không có kế hoạch thêm cơ chế như vậy.
Có nhiều lý do khiến chúng tôi tin rằng việc hỗ trợ nhiều luồng uỷ quyền OAuth 2.0 sẽ tốt hơn cho người dùng YouTube so với ClientLogin. Các luồng này hỗ trợ các trường hợp sử dụng cho ứng dụng máy tính, ứng dụng chỉ dành cho web, ứng dụng gốc dành cho thiết bị di động và thậm chí là các ứng dụng chạy trên các thiết bị như TV không có cơ chế nhập phức tạp, điều khó thực hiện bằng ClientLogin. Ngoài ra, chúng tôi nhận thấy ClientLogin gây ra nhiều vấn đề hơn sau khi ra mắt đối với nhiều nhà phát triển, một số vấn đề trong số đó được mô tả trong bài đăng trên blog của chúng tôi, ClientLogin #FAIL.
Sử dụng OAuth 2.0 cho tập lệnh độc lập phía máy chủ
Nhiều nhà phát triển sử dụng ClientLogin để uỷ quyền cho các tập lệnh dòng lệnh chạy trên máy chủ không có trình duyệt. Với OAuth 2.0, hầu như luôn có một trình duyệt tham gia – ngoại lệ là khi bạn đang làm việc trên một ứng dụng Android sử dụng Google Play Services để tìm nạp mã thông báo thông qua GoogleAuthUtil.
Trong luồng chỉ dành cho web, một trang web muốn thay mặt người dùng thực hiện các lệnh gọi API đã xác thực phải chuyển hướng người dùng đến trang xác thực google.com giải thích nội dung mà ứng dụng đang cố gắng truy cập. Sau đó, ứng dụng web sẽ nhận được một mã thông báo để thực hiện các lệnh gọi API. Sau đó, người dùng có thể thu hồi quyền truy cập của ứng dụng bất cứ lúc nào bằng cách sử dụng trang connected apps and sites.
Mã mẫu Python của chúng tôi minh hoạ cách tập lệnh dòng lệnh có thể khởi chạy trình duyệt và thực hiện lệnh gọi API từ cửa sổ dòng lệnh, tạo máy chủ cục bộ để nghe mã sau khi chuyển hướng uỷ quyền và tự động lưu mã thông báo cho các lệnh gọi API trong tương lai. Dưới đây là video minh hoạ cách thực hiện:
Mã thông báo được sử dụng là một chuỗi ASCII. Nếu là mã thông báo offline
, thì mã thông báo đó là có thể di chuyển. Bằng cách sử dụng mã thông báo được truy xuất, bạn có thể chạy tập lệnh trên máy tính, sau đó sao chép và sử dụng mã trên máy chủ từ xa mà không cần giao diện người dùng, miễn là mã đó tạo bản sao ứng dụng OAuth 2.0 có cùng mã ứng dụng và mã xác thực. Ngoài Python, thư viện ứng dụng API của Google cho các ngôn ngữ lập trình khác cũng cung cấp các phương thức trợ giúp để quản lý mã thông báo. Bạn có thể chia sẻ mã thông báo này giữa các ứng dụng và thậm chí sử dụng trong các thư viện HTTP cấp thấp hơn ngay trong tiêu đề ứng dụng hoặc dưới dạng tham số URL.
Một số ví dụ về tập lệnh phía máy chủ sử dụng mã thông báo ngoại tuyến:
- Một trình nền theo dõi thư mục để tự động tải video mới lên YouTube
- Công việc định kỳ cập nhật danh sách phát hằng ngày bằng nội dung mới
- Một tập lệnh theo dõi dữ liệu video thông qua API YouTube Analytics và thông báo cho người quản lý kênh khi một số sự kiện nhất định xảy ra, chẳng hạn như tổng thời gian xem vượt quá hạn mức. Xin lưu ý rằng trong trường hợp này, OAuth 2.0 là phương thức uỷ quyền duy nhất được hỗ trợ vì API Analytics không hỗ trợ ClientLogin.
Phần về mã thông báo truy cập có thời hạn dài cung cấp thêm thông tin chi tiết về cách tạo mã thông báo ngoại tuyến có thể dùng cho các quy trình phía máy chủ.
Các phương pháp hay nhất về mã ứng dụng khách và mật khẩu ứng dụng khách
Bất kỳ mã nào dùng chung mã ứng dụng và cặp khoá bí mật đều có thể sử dụng cùng một mã truy cập. Tốt nhất là bạn nên hạn chế quyền truy cập vào mã ứng dụng khách và mật khẩu ứng dụng khách cho mã chạy trên máy và thiết bị trong tổ chức của bạn.
Không đưa mã ứng dụng khách và khoá bí mật của ứng dụng khách vào mã ứng dụng gốc dành cho thiết bị di động. Tất cả nhà phát triển xác thực OAuth 2.0 từ thiết bị di động đều phải sử dụng mã ứng dụng khách "Ứng dụng đã cài đặt". Mã này yêu cầu thêm thông tin để xác minh rằng yêu cầu chỉ đến từ một ứng dụng do nhóm của bạn phát hành.
Trên thiết bị Android, thay vì sử dụng mã ứng dụng khách và khoá ứng dụng khách, ứng dụng của bạn được xác định bằng cách kết hợp tên gói và hàm băm chứng chỉ ký. Trên thiết bị iOS, mã nhận dạng gói và mã cửa hàng ứng dụng được sử dụng. Bạn có thể xem tài liệu chính thức về cách truy xuất thông tin này trên trang trợ giúp về Google API Console.
Tài khoản dịch vụ không hoạt động với API YouTube
Tài khoản dịch vụ không hoạt động với các lệnh gọi API Dữ liệu YouTube vì tài khoản dịch vụ cần có một kênh YouTube được liên kết. Bạn không thể liên kết các kênh mới hoặc hiện có với tài khoản dịch vụ. Nếu bạn sử dụng tài khoản dịch vụ để gọi API Dữ liệu YouTube, máy chủ API sẽ trả về lỗi với loại lỗi được đặt thành unauthorized
và lý do được đặt thành youtubeSignupRequired
.
Quyền truy cập ngoại tuyến/lâu dài vào API YouTube
OAuth 2.0 có mã thông báo ngắn hạn và mã thông báo dài hạn. Đối với các thao tác một lần, mã truy cập có thời gian tồn tại ngắn là lựa chọn tốt nhất. Các mã thông báo này sẽ hết hạn ngay sau khi được cấp. Đối với các công việc chạy trong thời gian dài, bạn nên xem xét việc mua mã làm mới. Mã này dùng để tìm nạp mã truy cập ngắn hạn.
Để đảm bảo rằng ứng dụng của bạn nhận được mã thông báo làm mới có thời hạn dài chứ không phải mã thông báo truy cập có thời hạn ngắn, hãy sử dụng quy trình "Ứng dụng đã cài đặt" khi tạo mã ứng dụng và chọn Other
cho giá trị "Loại ứng dụng đã cài đặt":
Bạn nên sử dụng quy trình "Ứng dụng đã cài đặt" cho trường hợp sử dụng này. Nếu cần quyền truy cập lâu dài vào API YouTube trong một ứng dụng web, bạn có thể truy xuất quyền này bằng cách đặt thông số access_type
thành offline
và thông số approval_prompt
thành force
trong yêu cầu uỷ quyền ban đầu hoặc cấu hình ứng dụng khách. Một số thư viện ứng dụng sẽ quản lý việc tìm nạp và làm mới mã thông báo truy cập. Nếu muốn tự viết mã uỷ quyền tuỳ chỉnh, bạn có thể tham khảo bài đăng trên blog Google Code để làm cơ sở cho mã của mình.
Sử dụng OAuth 2.0 với điện thoại, máy tính bảng và các thiết bị khác
Khi viết ứng dụng Android, nhà phát triển có thể tận dụng Google Play services để xử lý thông tin chi tiết về việc uỷ quyền. Dịch vụ Google Play cung cấp quy trình uỷ quyền chuẩn cho tất cả API của Google, bao gồm cả API cho nền tảng YouTube. Phương pháp này sẽ mang lại trải nghiệm người dùng vượt trội hơn nhiều so với phương thức xác thực tuỳ chỉnh bằng ClientLogin cho người dùng ứng dụng Android.
Trên thiết bị iOS, Google cung cấp hai lựa chọn:
- Google+ Platform for iOS tích hợp tính năng đăng nhập cho các sản phẩm của Google và cũng cho phép các tính năng xã hội
- gtm-oauth2 toolkit, cung cấp UIWebView uỷ quyền và quản lý mã thông báo
Đối với các thiết bị đóng vai trò là "màn hình thứ hai" hoặc các thiết bị như TV không có cơ chế nhập dễ sử dụng, bạn nên sử dụng phương pháp OAuth 2.0 cho thiết bị. OAuth 2.0 cho Thiết bị hoạt động bằng cách hiển thị một mã duy nhất cho người dùng khi cần có yêu cầu uỷ quyền. Tại thời điểm này, người dùng được yêu cầu truy cập vào http://google.com/device trên một thiết bị khác, chẳng hạn như máy tính xách tay hoặc điện thoại, rồi nhập mã nhận dạng duy nhất. Ứng dụng sẽ hiển thị một màn hình như sau:
Trong khi người dùng nhập mã trên một thiết bị khác, ứng dụng sẽ định kỳ thăm dò ý kiến để xem liệu mã đã được nhập hay chưa. Sau khi có, ứng dụng sẽ truy xuất mã thông báo để thực hiện lệnh gọi API. Để xem cách hoạt động này, hãy xem bản minh hoạ. Bạn có thể chạy bản minh hoạ này trên mọi thiết bị có thể truy cập web. Bản thân API này không phân biệt nền tảng, nhờ đó, API này rất hữu ích cho các thiết bị không có khả năng hiển thị web. Chúng tôi đã đăng mã mẫu bằng Python để dùng làm tài liệu tham khảo cho bản minh hoạ.
Tóm tắt
Cơ chế uỷ quyền OAuth 2.0 mang lại sự linh hoạt cho các nhà phát triển cần uỷ quyền của YouTube. Các nhà phát triển quen thuộc với ClientLogin có thể thấy rằng việc thiết lập ứng dụng để sử dụng OAuth 2.0 đòi hỏi nhiều công sức hơn một chút để bắt đầu, nhưng sau khi được chuyển, các ứng dụng OAuth 2.0 sẽ mang lại nhiều tính linh hoạt, bảo mật và khả năng hữu dụng hơn trên nhiều nền tảng cho người dùng cuối.
Nếu bạn có thêm câu hỏi về OAuth 2.0 hoặc bất kỳ ví dụ nào trong bài viết này, vui lòng đặt câu hỏi bằng thẻ youtube-api trên StackOverflow.