Sử dụng OAuth 2.0 để truy cập API Google

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

API của Google sử dụng giao thức OAuth 2.0 để xác thực và uỷ quyền. Google hỗ trợ các trường hợp OAuth 2.0 phổ biến, chẳng hạn như các trường hợp cho máy chủ web, phía máy khách, đã cài đặt và các ứng dụng thiết bị đầu vào giới hạn.

Để bắt đầu, hãy lấy thông tin đăng nhập ứng dụng OAuth 2.0 từ Google API Console. Sau đó, ứng dụng khách của bạn yêu cầu một mã truy cập từ Máy chủ ủy quyền của Google, trích xuất một mã thông báo từ phản hồi và gửi mã thông báo đó đến API Google mà bạn muốn truy cập. Để minh hoạ tương tác về cách sử dụng OAuth 2.0 với Google (bao gồm cả tùy chọn sử dụng thông tin đăng nhập của ứng dụng khách), hãy thử nghiệm với OAuth 2.0 Playground.

Trang này cung cấp thông tin tổng quan về các trường hợp uỷ quyền OAuth 2.0 mà Google hỗ trợ và cung cấp đường liên kết đến nội dung chi tiết hơn. Để biết thông tin chi tiết về cách sử dụng OAuth 2.0 để xác thực, hãy xem phần OpenID Connect.

Các bước cơ bản

Tất cả ứng dụng đều tuân theo một mẫu cơ bản khi truy cập API của Google bằng OAuth 2.0. Ở cấp độ cao, bạn sẽ tuân theo 5 bước:

1. Nhận thông tin xác thực OAuth 2.0 từ Google API Console.

Truy cập vào Google API Console để lấy thông tin đăng nhập OAuth 2.0, chẳng hạn như mã nhận dạng ứng dụng khách và mật khẩu ứng dụng khách mà cả Google và ứng dụng của bạn đã biết. Tập hợp giá trị thay đổi dựa trên loại ứng dụng bạn đang tạo. Ví dụ: ứng dụng JavaScript không yêu cầu mã bí mật, nhưng ứng dụng máy chủ web thì có.

2. Lấy mã truy cập từ Máy chủ ủy quyền của Google.

Trước khi có thể truy cập vào dữ liệu riêng tư bằng API của Google, ứng dụng của bạn phải nhận được mã truy cập cấp quyền truy cập vào API đó. Mã thông báo truy cập duy nhất có thể cấp quyền truy cập khác nhau vào nhiều API. Tham số biến có tên scope sẽ kiểm soát tập hợp tài nguyên và thao tác mà mã thông báo truy cập cho phép. Trong yêu cầu mã truy cập, ứng dụng của bạn sẽ gửi một hoặc nhiều giá trị trong tham số scope.

Có một số cách để đưa ra yêu cầu này và các yêu cầu này sẽ thay đổi tuỳ theo loại ứng dụng bạn đang tạo. Ví dụ: một ứng dụng JavaScript có thể yêu cầu mã truy cập bằng cách dùng lệnh chuyển hướng trình duyệt đến Google, trong khi ứng dụng cài đặt trên một thiết bị không có trình duyệt sẽ sử dụng các yêu cầu dịch vụ web.

Một số yêu cầu đòi hỏi người dùng phải thực hiện một bước xác thực khi đăng nhập bằng Tài khoản Google. Sau khi đăng nhập, người dùng được hỏi liệu họ có sẵn sàng cấp một hoặc nhiều quyền mà ứng dụng của bạn đang yêu cầu không. Quá trình này gọi là sự đồng ý của người dùng.

Nếu người dùng cấp ít nhất một quyền, thì Máy chủ uỷ quyền của Google sẽ gửi cho ứng dụng của bạn một mã truy cập (hoặc một mã uỷ quyền mà ứng dụng có thể dùng để lấy mã truy cập) và danh sách phạm vi truy cập mà mã đó cấp. Nếu người dùng không cấp quyền, máy chủ sẽ trả về lỗi.

Nhìn chung, bạn nên tăng dần phạm vi để yêu cầu phạm vi, tại thời điểm yêu cầu quyền truy cập, thay vì ở phía trước. Ví dụ: một ứng dụng muốn hỗ trợ lưu sự kiện vào lịch không được yêu cầu quyền truy cập vào Lịch Google cho đến khi người dùng nhấn nút "Thêm vào Lịch"; hãy xem phần Ủy quyền gia tăng.

3. Kiểm tra các phạm vi truy cập mà người dùng cấp.

So sánh các phạm vi trong phản hồi mã thông báo truy cập với các phạm vi cần thiết để truy cập vào các tính năng và chức năng của ứng dụng phụ thuộc vào quyền truy cập vào API Google liên quan. Tắt mọi tính năng của ứng dụng mà không thể hoạt động nếu không có quyền truy cập vào API liên quan.

Phạm vi trong yêu cầu của bạn có thể không khớp với phạm vi trong phản hồi, ngay cả khi người dùng đã cấp tất cả phạm vi yêu cầu. Hãy tham khảo tài liệu về từng API của Google để biết phạm vi cần thiết để truy cập. API có thể liên kết nhiều giá trị chuỗi phạm vi với một phạm vi truy cập duy nhất, trả về cùng một chuỗi phạm vi cho tất cả các giá trị được phép trong yêu cầu. Ví dụ: API Google People có thể trả về phạm vi https://www.googleapis.com/auth/contacts khi một ứng dụng yêu cầu người dùng ủy quyền phạm vi https://www.google.com/m8/feeds/; phương thức API Google People people.updateContact yêu cầu phạm vi được cấp là https://www.googleapis.com/auth/contacts.

4. Gửi mã truy cập đến một API.

Sau khi nhận được mã truy cập, ứng dụng sẽ gửi mã thông báo đó đến API Google trong tiêu đề của yêu cầu Ủy quyền HTTP. Có thể gửi mã thông báo dưới dạng tham số chuỗi truy vấn URI, nhưng bạn không nên làm vậy vì các tham số URI có thể dẫn đến các tệp nhật ký không hoàn toàn an toàn. Ngoài ra, bạn nên tránh sử dụng tên REST của các tham số URI không cần thiết.

Mã thông báo truy cập chỉ hợp lệ đối với tập hợp các thao tác và tài nguyên được mô tả trong scope của yêu cầu mã thông báo. Ví dụ: nếu bạn cấp mã truy cập cho API Lịch Google thì mã này sẽ không cấp quyền truy cập vào API Danh bạ Google. Tuy nhiên, bạn có thể gửi mã truy cập đó đến API Lịch Google nhiều lần cho các thao tác tương tự.

5. Làm mới mã thông báo truy cập nếu cần.

Mã truy cập có giới hạn vòng đời. Nếu cần thêm quyền truy cập vào một API Google ngoài thời gian tồn tại của một mã truy cập, thì ứng dụng của bạn có thể nhận được mã làm mới. Mã làm mới cho phép ứng dụng của bạn lấy mã truy cập mới.

Trường hợp

Ứng dụng máy chủ web

Điểm cuối Google OAuth 2.0 hỗ trợ các ứng dụng máy chủ web sử dụng ngôn ngữ và khung như PHP, Java, Python, Ruby và ASP.NET.

Trình tự uỷ quyền bắt đầu khi ứng dụng của bạn chuyển hướng trình duyệt đến một URL của Google; URL đó chứa các tham số truy vấn cho biết loại quyền truy cập đang được yêu cầu. Google xử lý việc xác thực người dùng, lựa chọn phiên hoạt động và sự đồng ý của người dùng. Kết quả là một mã uỷ quyền mà ứng dụng có thể trao đổi để có mã truy cập và mã làm mới.

Ứng dụng phải lưu trữ mã làm mới để dùng sau này và sử dụng mã truy cập để truy cập API Google. Sau khi mã truy cập hết hạn, ứng dụng sẽ dùng mã làm mới để lấy mã mới.

Ứng dụng của bạn gửi yêu cầu mã thông báo tới Máy chủ ủy quyền của Google,
                  nhận mã ủy quyền, trao đổi mã lấy mã thông báo và sử dụng mã thông báo
                  để gọi điểm cuối API của Google.

Để biết thông tin chi tiết, hãy xem phần Sử dụng OAuth 2.0 cho ứng dụng máy chủ web.

Các ứng dụng đã cài đặt

Điểm cuối Google OAuth 2.0 hỗ trợ các ứng dụng được cài đặt trên thiết bị, chẳng hạn như máy tính, thiết bị di động và máy tính bảng. Khi bạn tạo một mã ứng dụng khách thông qua Google API Console, hãy chỉ định rằng đây là ứng dụng Đã cài đặt, sau đó chọn ứng dụng Android, Chrome, iOS, Universal Windows Platform (UWP) hoặc Máy tính để bàn làm loại ứng dụng.

Quá trình này sẽ dẫn đến một mã ứng dụng khách và trong một số trường hợp sẽ là một mã bí mật ứng dụng khách được nhúng vào mã nguồn của ứng dụng. (Trong bối cảnh này, mật khẩu ứng dụng khách rõ ràng không được coi là một bí mật.)

Trình tự uỷ quyền bắt đầu khi ứng dụng của bạn chuyển hướng trình duyệt đến một URL của Google; URL đó chứa các tham số truy vấn cho biết loại quyền truy cập đang được yêu cầu. Google xử lý việc xác thực người dùng, lựa chọn phiên hoạt động và sự đồng ý của người dùng. Kết quả là một mã uỷ quyền mà ứng dụng có thể trao đổi để có mã truy cập và mã làm mới.

Ứng dụng phải lưu trữ mã làm mới để dùng sau này và sử dụng mã truy cập để truy cập API Google. Sau khi mã truy cập hết hạn, ứng dụng sẽ dùng mã làm mới để lấy mã mới.

Ứng dụng của bạn gửi yêu cầu mã thông báo tới Máy chủ ủy quyền của Google,
                  nhận mã ủy quyền, trao đổi mã lấy mã thông báo và sử dụng mã thông báo
                  để gọi điểm cuối API của Google.

Để biết thông tin chi tiết, hãy xem phần Sử dụng OAuth 2.0 cho ứng dụng đã cài đặt.

Ứng dụng phía máy khách (JavaScript)

Điểm cuối Google OAuth 2.0 hỗ trợ các ứng dụng JavaScript chạy trong trình duyệt.

Trình tự uỷ quyền bắt đầu khi ứng dụng của bạn chuyển hướng trình duyệt đến một URL của Google; URL đó chứa các tham số truy vấn cho biết loại quyền truy cập đang được yêu cầu. Google xử lý việc xác thực người dùng, lựa chọn phiên hoạt động và sự đồng ý của người dùng.

Kết quả là một mã truy cập mà ứng dụng phải xác thực trước khi đưa vào yêu cầu API của Google. Khi mã thông báo hết hạn, ứng dụng sẽ lặp lại quy trình.

Ứng dụng JS của bạn gửi một yêu cầu mã thông báo tới Máy chủ ủy quyền của Google,
                  nhận được một mã thông báo, xác thực mã thông báo và sử dụng mã thông báo đó để gọi một điểm cuối
                  API của Google.

Để biết thông tin chi tiết, hãy xem phần Sử dụng OAuth 2.0 cho ứng dụng phía máy khách.

Ứng dụng trên thiết bị đầu vào giới hạn

Điểm cuối Google OAuth 2.0 hỗ trợ các ứng dụng chạy trên các thiết bị đầu vào giới hạn, chẳng hạn như máy chơi trò chơi, máy quay video và máy in.

Trình tự uỷ quyền bắt đầu bằng việc ứng dụng gửi yêu cầu dịch vụ web tới một URL của Google cho mã uỷ quyền. Phản hồi chứa một số tham số, bao gồm URL và mã mà ứng dụng hiển thị cho người dùng.

Người dùng lấy URL và mã từ thiết bị, sau đó chuyển sang một thiết bị hoặc máy tính riêng biệt có chức năng nhập phong phú hơn. Người dùng khởi chạy một trình duyệt, chuyển đến URL được chỉ định, đăng nhập và nhập mã.

Trong khi đó, ứng dụng sẽ thăm dò một URL của Google tại một khoảng thời gian cụ thể. Sau khi người dùng phê duyệt quyền truy cập, phản hồi từ máy chủ của Google sẽ chứa mã truy cập và mã làm mới. Ứng dụng sẽ lưu trữ mã làm mới để dùng sau này và sử dụng mã truy cập để truy cập vào API của Google. Khi mã truy cập hết hạn, ứng dụng sẽ dùng mã làm mới để lấy mã mới.

Người dùng đăng nhập trên một thiết bị riêng biệt có trình duyệt

Để biết thông tin chi tiết, hãy xem phần Sử dụng OAuth 2.0 cho thiết bị.

Tài khoản dịch vụ

Các API của Google như API dự đoán và Google Cloud Storage có thể hành động thay mặt ứng dụng của bạn mà không cần truy cập thông tin người dùng. Trong những trường hợp như vậy, ứng dụng của bạn cần chứng minh danh tính riêng với API, nhưng không cần người dùng đồng ý. Tương tự, trong các trường hợp doanh nghiệp, ứng dụng của bạn có thể yêu cầu quyền truy cập được ủy quyền vào một số tài nguyên.

Đối với các loại tương tác từ máy chủ đến máy chủ, bạn cần có tài khoản dịch vụ. Tài khoản này là tài khoản thuộc ứng dụng của bạn thay vì một người dùng cuối riêng lẻ. Ứng dụng thay mặt cho tài khoản dịch vụ gọi các API của Google và bạn không cần phải có sự đồng ý của người dùng. (Trong các trường hợp không có tài khoản dịch vụ, ứng dụng của bạn sẽ thay mặt người dùng cuối gọi ứng dụng Google API, và đôi khi người dùng phải đồng ý.)

Thông tin đăng nhập của tài khoản dịch vụ mà bạn nhận được từ Google API Console, bao gồm địa chỉ email đã tạo duy nhất, mã ứng dụng và ít nhất một cặp khoá công khai/riêng tư. Bạn sẽ sử dụng mã ứng dụng khách và một khoá riêng tư để tạo JWT đã ký và tạo một yêu cầu mã thông báo truy cập theo định dạng thích hợp. Sau đó, ứng dụng của bạn sẽ gửi yêu cầu mã thông báo tới Máy chủ uỷ quyền Google OAuth 2.0. Máy chủ này sẽ trả về một mã truy cập. Ứng dụng sử dụng mã thông báo này để truy cập vào API của Google. Khi mã thông báo hết hạn, ứng dụng sẽ lặp lại quy trình.

Ứng dụng máy chủ của bạn sử dụng JWT để yêu cầu mã thông báo từ Máy chủ uỷ quyền của Google, sau đó sử dụng mã thông báo để gọi điểm cuối Google API. Không có
                    người dùng cuối nào tham gia.

Để biết thông tin chi tiết, hãy xem tài liệu về tài khoản dịch vụ.

Kích thước mã thông báo

Mã thông báo có thể khác nhau về kích thước, tuỳ thuộc vào các giới hạn sau:

  • Mã uỷ quyền: 256 byte
  • Mã thông báo truy cập: 2048 byte
  • Mã làm mới: 512 byte

Để biết thông tin chi tiết, hãy xem tài liệu về API.

Google giữ quyền thay đổi kích thước mã thông báo trong những giới hạn này và ứng dụng của bạn cũng phải hỗ trợ kích thước mã thông báo thay đổi cho phù hợp.

Làm mới mã thông báo hết hạn

Bạn phải viết mã để dự đoán khả năng một mã làm mới được cấp có thể không còn hoạt động nữa. Mã làm mới có thể ngừng hoạt động vì một trong các lý do sau:

  • Người dùng đã thu hồi quyền truy cập của ứng dụng.
  • Mã thông báo làm mới đã không được sử dụng trong sáu tháng.
  • Người dùng đã thay đổi mật khẩu và mã làm mới có chứa phạm vi Gmail.
  • Tài khoản người dùng đã vượt quá số lượng mã thông báo làm mới tối đa (trực tiếp).
  • Người dùng thuộc một tổ chức Google Cloud Platform có chính sách kiểm soát phiên hoạt động đang có hiệu lực.

Một dự án Google Cloud Platform có màn hình xin phép bằng OAuth được định cấu hình cho một loại người dùng bên ngoài và trạng thái xuất bản của "Testing" được phát hành một mã thông báo làm mới hết hạn sau 7 ngày.

Mỗi mã khách hàng OAuth 2.0 hiện có giới hạn là 100 mã làm mới cho mỗi Tài khoản Google. Nếu đã đạt đến giới hạn này, việc tạo mã làm mới mới sẽ tự động vô hiệu hoá mã làm mới cũ nhất mà không có cảnh báo. Giới hạn này không áp dụng cho các tài khoản dịch vụ.

Ngoài ra, chúng tôi cũng áp dụng một hạn mức lớn hơn về tổng số lượng mã thông báo làm mới mà một tài khoản người dùng hoặc tài khoản dịch vụ có thể có trên tất cả ứng dụng. Hầu hết người dùng thông thường sẽ không vượt quá giới hạn này nhưng một tài khoản nhà phát triển dùng để thử nghiệm một phương thức triển khai có thể.

Nếu cần ủy quyền cho nhiều chương trình, máy hoặc thiết bị, bạn nên giới hạn số lượng ứng dụng mà bạn cho phép trong mỗi Tài khoản Google ở mức 15 hoặc 20. Nếu là quản trị viên Google Workspace, bạn có thể tạo thêm người dùng có đặc quyền của quản trị viên và sử dụng các đặc quyền này để cấp phép cho một số khách hàng.

Xử lý các chính sách kiểm soát phiên cho các tổ chức Google Cloud Platform (GCP)

Quản trị viên của các tổ chức hỗ trợ trên GCP có thể yêu cầu người dùng xác thực lại thường xuyên trong khi họ truy cập vào các tài nguyên trên GCP bằng cách sử dụng tính năng kiểm soát phiên của Google Cloud. Chính sách này ảnh hưởng đến quyền truy cập vào Google Cloud Console, Google Cloud SDK (còn gọi là CLI gcloud) và mọi ứng dụng OAuth của bên thứ ba yêu cầu phạm vi Cloud Platform. Nếu người dùng có sẵn chính sách kiểm soát phiên, thì khi hết thời lượng phiên, lệnh gọi API của bạn sẽ gặp lỗi tương tự như điều sẽ xảy ra nếu mã làm mới bị thu hồi – lệnh gọi sẽ không thành công với loại lỗi invalid_token; có thể dùng loại lỗi phụ để phân biệt mã thông báo thu hồi và lỗi do chính sách kiểm soát phiên. Vì thời lượng phiên có thể rất hạn chế (từ 1 giờ đến 24 giờ), nên bạn phải xử lý trường hợp này một cách linh hoạt bằng cách khởi động lại phiên xác thực.

Tương tự như vậy, bạn không được sử dụng hoặc khuyến khích việc sử dụng thông tin xác thực người dùng để triển khai máy chủ đến máy chủ. Nếu thông tin đăng nhập của người dùng được triển khai trên một máy chủ cho các công việc hoặc hoạt động dài hạn và một khách hàng áp dụng chính sách kiểm soát phiên trên những người dùng đó, thì ứng dụng máy chủ sẽ không thành công vì không có cách nào để xác thực lại người dùng đó khi thời lượng phiên hết hạn.

Để biết thêm thông tin về cách giúp khách hàng triển khai tính năng này, hãy tham khảo bài viết trợ giúp tập trung vào quản trị viên này.

Thư viện ứng dụng

Các thư viện ứng dụng sau đây tích hợp với các khung phổ biến, giúp việc triển khai OAuth 2.0 trở nên đơn giản hơn. Các tính năng khác sẽ được thêm vào thư viện theo thời gian.