Chuyển từ ClientLogin sang OAuth 2.0

Ikai Lan, YouTube Developer Relations – June 2013

Các API của 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ó thêm tính năng hỗ trợ xác thực ClientLogin hoặc tính năng tương tự trong YouTube API 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 bổ sung 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 quy trình 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 di động và thậm chí cả những ứng dụng chạy trên các thiết bị như TV không có cơ chế đầu vào phức tạp, điều mà khó thực hiện bằng cách sử dụng ClientLogin. Ngoài ra, chúng tôi nhận thấy ClientLogin gây ra nhiều vấn đề hơn cho nhiều nhà phát triển sau khi ra mắt.

Sử dụng OAuth 2.0 cho các 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ủ mà không có trình duyệt. Với OAuth 2.0, hầu như luôn có một trình duyệt liên quan – ngoại trừ 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 thực hiện các lệnh gọi API đã xác thực thay mặt cho người dùng phải chuyển hướng người dùng đến một trang xác thực google.com giải thích những gì ứ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 mà ứng dụng này dùng để 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.

Các 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 một trình duyệt và thực hiện các lệnh gọi API từ cửa sổ thiết bị đầu cuối, tạo một máy chủ cục bộ để theo dõi 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. Video minh hoạ tính năng này đang hoạt động ở bên dưới:

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 đó có thể di động. Khi sử dụng mã thông báo đã truy xuất, bạn sẽ 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ột máy chủ từ xa mà không có giao diện người dùng đồ hoạ, miễn là mã đó tạo một ứng dụng OAuth 2.0 có cùng mã ứng dụng khách và thông tin bí mật. Ngoài Python, thư viện ứng dụng Google API 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. Các phương thức này có thể được chia sẻ giữa các ứng dụng và thậm chí được dùng trực tiếp trong các thư viện HTTP cấp thấp trong tiêu đề ứng dụng hoặc dưới dạng một 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 chương trình nền giám sát một thư mục để tìm video mới và tự động tải lên YouTube
  • Một dịch vụ chạy ngầm theo thời gian định trước giúp 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 giám sát 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 diễn ra, chẳng hạn như tổng thời gian xem vượt quá một giới hạn. 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ì Analytics API không hỗ trợ ClientLogin.

Phần về mã truy cập có thời hạn sử dụng lâu 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à khoá bí mật của ứng dụng khách

Mọi mã có cùng cặp mã nhận dạng và khoá bí mật của ứng dụng đều có thể sử dụng cùng một mã truy cập. Bạn nên hạn chế quyền truy cập vào mã ứng dụng khách và khoá bí mật của ứng dụng khách đối với mã chạy trên các máy và thiết bị trong tổ chức của bạn.

Không thêm mã ứng dụng khách và khoá bí mật của ứng dụng khách vào mã ứng dụng di động gốc. Tất cả nhà phát triển thực hiệ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á bí mật của ứ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à một hàm băm chứng chỉ ký. Trên thiết bị iOS, mã nhận dạng gói và mã nhận dạng App Store được 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 Google Cloud console.

Tài khoản dịch vụ không hoạt động với YouTube API

Tài khoản dịch vụ không hoạt động đối với các lệnh gọi YouTube Data API vì tài khoản dịch vụ yêu cầu phải có một kênh YouTube được liên kết và bạn không thể liên kết kênh mới hoặc kênh hiện có với tài khoản dịch vụ. Nếu bạn dùng tài khoản dịch vụ để gọi YouTube Data API, thì 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 vào YouTube API khi không có mạng/trong thời gian dài

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 hạn ngắn là lựa chọn phù hợp 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 lấy mã làm mới. Mã này được 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ã làm mới có thời gian tồn tại lâu dài chứ không phải mã truy cập có thời gian tồn tại 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 YouTube API trong một ứng dụng web, bạn có thể truy xuất một mã bằng cách đặt tham số access_type thành offline và tham 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. 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ã 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 của Google Code mà chúng tôi đã xuất bản để làm cơ sở cho mã của bạn.

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 các ứ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 tiêu 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 cho người dùng ứng dụng Android của bạn so với phương thức xác thực tuỳ chỉnh bằng ClientLogin.

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 một UIWebView uỷ quyền và quản lý mã thông báo

Đối với những thiết bị được thiết kế để hoạt động như thiết bị "màn hình thứ hai" hoặc những thiết bị như TV không có cơ chế nhập liệu dễ sử dụng, OAuth 2.0 cho thiết bị là phương pháp được ưu tiên. OAuth 2.0 cho thiết bị hoạt động bằng cách cung cấp một mã riêng biệ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ã duy nhất. Ứng dụng sẽ hiển thị một màn hình có dạng 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ò để xem mã đã được nhập hay chưa. Sau khi có được, ứng dụng sẽ truy xuất một mã thông báo để thực hiện các lệnh gọi API. Để xem ví dụ thực tế, 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ó kết nối Internet. Bản thân API này không phụ thuộc vào nền tảng, nên hữu ích cho những thiết bị không có khả năng kết xuất web. Chúng tôi đã đăng mã mẫu bằng Python cho bản minh hoạ để bạn tham khảo.

Tóm tắt

Cơ chế uỷ quyền OAuth 2.0 mang lại sự linh hoạt cho những nhà phát triển cần có quyền uỷ quyền của YouTube. Những 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. Tuy nhiên, sau khi được chuyển, các ứng dụng OAuth 2.0 sẽ mang đến nhiều sự linh hoạt, bảo mật và khả năng sử 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 kèm theo thẻ youtube-api trên StackOverflow.