Cách hoạt động của sự uỷ quyền của người dùng

Nếu bạn chưa quen hoặc mới sử dụng Dịch vụ nhận dạng của Google hoặc uỷ quyền, hãy bắt đầu bằng cách đọc phần Tổng quan.

Google cung cấp một thư viện JavaScript có các tính năng uỷ quyền để giúp bạn quản lý phạm vi, nhận được sự đồng ý của người dùng và đơn giản hoá việc sử dụng các quy trình OAuth 2.0 tiêu chuẩn. Ứng dụng web của bạn (chạy trong trình duyệt của người dùng) sử dụng thư viện này để quản lý luồng cấp quyền trực tiếp OAuth 2.0 hoặc để bắt đầu quy trình sử dụng mã uỷ quyền kết thúc trên nền tảng phụ trợ của bạn.

Chỉ xác thực phạm vi

Một số phạm vi chỉ được dùng để xác thực người dùng: email, profileopenid. Nếu ứng dụng của bạn chỉ sử dụng các phạm vi này, hãy cân nhắc xem Mã thông báo JWT và tính năng Đăng nhập bằng Google để đăng ký và đăng nhập người dùng có đáp ứng nhu cầu của bạn hay không. Trong hầu hết các trường hợp, đây là phương thức đơn giản nhất hiện có để xác thực người dùng.

Các thuật ngữ và khái niệm chính

Các hướng dẫn này giả định rằng bạn có kiến thức cơ bản về các khái niệm OAuth 2.0 và các tiêu chuẩn IETF như RFC6749. Các thuật ngữ sau đây được dùng trong suốt các hướng dẫn uỷ quyền:

  • Mã truy cập là thông tin đăng nhập ngắn hạn cho mỗi người dùng do Google phát hành. Mã này được dùng để gọi các API của Google một cách an toàn và truy cập vào dữ liệu người dùng.
  • Mã uỷ quyền là mã tạm thời do Google phát hành để xác định một cách an toàn từng người dùng đăng nhập vào Tài khoản Google của họ từ trình duyệt. Nền tảng phụ trợ của bạn sẽ trao đổi mã này để lấy mã truy cập và mã làm mới.
  • Mã làm mới là thông tin đăng nhập lâu dài cho mỗi người dùng do Google phát hành, được lưu trữ an toàn trên nền tảng của bạn và có thể dùng để lấy mã truy cập mới, hợp lệ ngay cả khi người dùng không có mặt.
  • Phạm vi giới hạn mã thông báo ở một lượng dữ liệu người dùng được xác định và giới hạn, hãy xem Phạm vi OAuth 2.0 cho các API của Google để biết thêm.
  • Chế độ cửa sổ bật lên là một quy trình sử dụng mã uỷ quyền dựa trên lệnh gọi lại JavaScript chạy trong trình duyệt của người dùng. Google sẽ gọi trình xử lý lệnh gọi lại của bạn. Sau đó, trình xử lý này chịu trách nhiệm gửi mã uỷ quyền đến nền tảng của bạn. Cách thực hiện việc này là tuỳ thuộc vào bạn.
  • Chế độ chuyển hướng là một quy trình sử dụng mã uỷ quyền dựa trên lệnh chuyển hướng HTTP. Trước tiên, tác nhân người dùng sẽ được chuyển hướng đến Google, sau đó, một lượt chuyển hướng thứ hai từ Google đến điểm cuối mã uỷ quyền của nền tảng sẽ bao gồm mã này.

Google (với tư cách là bên phát hành) sẽ đặt thời gian tồn tại của mã thông báo. Do nhiều yếu tố, thời lượng chính xác có thể thay đổi.

Luồng OAuth 2.0

Hai quy trình, ngầm ẩn và mã uỷ quyền, sẽ được thảo luận. Cả hai đều trả về một mã truy cập phù hợp để sử dụng với các API của Google.

Bạn nên sử dụng quy trình sử dụng mã uỷ quyền vì quy trình này giúp tăng cường tính bảo mật cho người dùng. Quy trình này cũng trả về một mã làm mới có thể dùng để lấy mã truy cập mà không cần người dùng hiện diện, cho phép nền tảng của bạn thực hiện các thao tác không đồng bộ, chẳng hạn như gửi SMS nhắc nhở về một cuộc họp sắp diễn ra được lên lịch vào phút cuối. Chọn mô hình uỷ quyền giải thích chi tiết hơn về sự khác biệt giữa hai quy trình.

Thư viện JavaScript Dịch vụ nhận dạng của Google tuân theo tiêu chuẩn OAuth 2.0 để:

  • quản lý quy trình ngầm ẩn để cho phép ứng dụng web trong trình duyệt của bạn nhanh chóng lấy mã truy cập từ Google. Mã này là cần thiết để gọi các API của Google.
  • bắt đầu quy trình mã uỷ quyền từ trình duyệt của người dùng.

Các bước thường gặp

Cả quy trình ngầm và quy trình sử dụng mã uỷ quyền đều bắt đầu theo cùng một cách:

  1. Ứng dụng của bạn yêu cầu quyền truy cập vào một hoặc nhiều phạm vi.
  2. Google sẽ hiện một hộp thoại đồng ý cho người dùng và trước tiên sẽ đăng nhập người dùng vào Tài khoản Google của họ nếu cần.
  3. Người dùng phê duyệt riêng từng phạm vi được yêu cầu.

Sau đó, mỗi luồng sẽ kết thúc bằng các bước khác nhau.

Khi sử dụng luồng cấp quyền trực tiếp

  • Google sử dụng một trình xử lý lệnh gọi lại để thông báo cho ứng dụng của bạn về kết quả đồng ý và trả về mã truy cập cho mọi phạm vi được phê duyệt.

Khi sử dụng quy trình mã uỷ quyền

  • Google phản hồi bằng mã uỷ quyền cho mỗi người dùng:
    • Ở chế độ chuyển hướng, mã này sẽ được trả về điểm cuối mã uỷ quyền của nền tảng.
    • Ở chế độ hộp thoại, mã sẽ được trả về trình xử lý lệnh gọi lại của ứng dụng trong trình duyệt mà người dùng không cần rời khỏi trang web của bạn.
  • Bắt đầu từ Bước 4: Xử lý phản hồi của máy chủ OAuth 2.0, nền tảng phụ trợ của bạn sẽ hoàn tất quá trình trao đổi giữa máy chủ với Google, cuối cùng sẽ trả về mã làm mới và mã truy cập cho mỗi người dùng cho nền tảng của bạn.

Trước khi nhận được mã truy cập, từng người dùng phải cấp quyền đồng ý cho ứng dụng của bạn truy cập vào các phạm vi được yêu cầu. Để làm như vậy, Google sẽ hiển thị một hộp thoại đồng ý trong Bước 2 và ghi lại kết quả trong myaccount.google.com/permissions.

Tên ứng dụng, biểu trưng, chính sách quyền riêng tư, điều khoản dịch vụ và các phạm vi được yêu cầu của bạn sẽ xuất hiện cho người dùng cùng với lựa chọn phê duyệt hoặc huỷ yêu cầu.

Trong hình 1, hộp thoại đồng ý cho một phạm vi duy nhất sẽ xuất hiện. Khi yêu cầu một phạm vi duy nhất, bạn không cần đánh dấu vào hộp kiểm để phê duyệt hoặc từ chối một phạm vi.

Hộp thoại đồng ý của người dùng có các nút Huỷ hoặc Tiếp tục và một phạm vi duy nhất, không có hộp đánh dấu nào xuất hiện.

Hình 1: Hộp thoại đồng ý của người dùng có một phạm vi duy nhất.

Trong hình 2, hộp thoại đồng ý cho nhiều phạm vi được hiển thị. Khi có nhiều phạm vi được yêu cầu, bạn cần có các hộp đánh dấu riêng lẻ để cho phép người dùng phê duyệt hoặc từ chối từng phạm vi.

Hộp thoại sự đồng ý của người dùng có các nút Huỷ hoặc Tiếp tục và nhiều phạm vi, mỗi phạm vi có một hộp đánh dấu.

Hình 2: Hộp thoại sự đồng ý của người dùng có nhiều phạm vi.

Tài khoản người dùng

Bạn cần có Tài khoản Google để ghi lại sự đồng ý và cấp mã truy cập. Trước đó, người dùng cá nhân phải tự xác thực với Google bằng cách đăng nhập vào Tài khoản Google.

Mặc dù không bắt buộc, nhưng bạn nên sử dụng tính năng Đăng nhập bằng Google để đăng ký và đăng nhập vào ứng dụng web hoặc nền tảng phụ trợ của mình. Việc này giúp giảm sự bất tiện cho người dùng bằng cách giảm thiểu số lượng bước bắt buộc và cho phép bạn liên kết mã truy cập với từng tài khoản trên nền tảng của mình (không bắt buộc).

Ví dụ: việc sử dụng tính năng Đăng nhập bằng Google sẽ thiết lập một phiên hoạt động của Tài khoản Google, do đó, bạn không cần phải nhắc người dùng đăng nhập vào Tài khoản Google sau này khi đưa ra yêu cầu uỷ quyền. Nếu bạn chọn xác thực người dùng cho ứng dụng của mình bằng các phương tiện khác, chẳng hạn như tên người dùng và mật khẩu hoặc các nhà cung cấp danh tính khác, thì trước tiên, người dùng vẫn phải đăng nhập vào một Tài khoản Google để đồng ý.

Việc thêm gợi ý đăng nhập trong quá trình khởi tạo uỷ quyền (thường là địa chỉ email của Tài khoản Google của người dùng) cho phép Google bỏ qua việc hiển thị một trình chọn tài khoản, giúp người dùng tiết kiệm một bước. Thông tin đăng nhập Mã thông báo nhận dạng do tính năng Đăng nhập bằng Google trả về có chứa địa chỉ email của người dùng.

Các ứng dụng web chỉ chạy trong trình duyệt có thể chỉ dựa vào Google để xác thực người dùng, chọn không triển khai hệ thống quản lý tài khoản người dùng. Trong trường hợp này (còn gọi là luồng cấp quyền trực tiếp), bạn không cần liên kết mã làm mới với tài khoản người dùng và bộ nhớ bảo mật quản lý.

Ngoài ra, quy trình sử dụng mã uỷ quyền yêu cầu phải có hệ thống tài khoản người dùng. Mỗi mã làm mới cho người dùng phải được liên kết với một tài khoản riêng lẻ trên nền tảng phụ trợ của bạn và được lưu trữ để sử dụng sau này. Cách triển khai, làm việc và quản lý hệ thống tài khoản người dùng là riêng biệt đối với nền tảng của bạn và không được thảo luận chi tiết hơn.

Người dùng có thể xem hoặc thu hồi sự đồng ý bất cứ lúc nào trong phần cài đặt Tài khoản Google.

Theo tùy chọn, ứng dụng web hoặc nền tảng của bạn có thể gọi google.accounts.oauth2.revoke để thu hồi mã thông báo và xóa sự đồng ý của người dùng. Điều này hữu ích khi người dùng xóa tài khoản của họ khỏi nền tảng của bạn.

Các lựa chọn uỷ quyền khác

Ngoài ra, các trình duyệt có thể lấy mã truy cập bằng cách sử dụng luồng cấp quyền trực tiếp bằng cách gọi trực tiếp các Điểm cuối OAuth 2.0 của Google như mô tả trong phần OAuth 2.0 cho các ứng dụng web phía máy khách.

Tương tự, đối với quy trình sử dụng mã uỷ quyền, bạn có thể chọn triển khai các phương thức của riêng mình và làm theo các bước được nêu trong phần Sử dụng OAuth 2.0 cho các ứng dụng máy chủ web.

Trong cả hai trường hợp, bạn nên sử dụng thư viện Dịch vụ nhận dạng của Google để giảm thời gian và công sức phát triển, đồng thời giảm thiểu các rủi ro bảo mật, chẳng hạn như những rủi ro được mô tả trong Phương pháp hay nhất hiện tại về bảo mật OAuth 2.0.