Cách thức hoạt động của chế độ ủy quyền của người dùng

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

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

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

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 những phạm vi này, hãy cân nhắc xem Mã thông báo ID JWT và tính năng Đăng nhập bằng Google để đăng ký và đăng nhập 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 và đơn giản nhất có sẵn để xác thực người dùng.

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

Những hướng dẫn này giả định rằng bạn đã có hiểu biết cơ bản về các khái niệm của OAuth 2.0 và các tiêu chuẩn IETF như RFC6749. Các thuật ngữ sau đây được sử dụng trong hướng dẫn ủy quyền:

  • Mã thông báo truy cập là một thông tin xác thực ngắn hạn mà mỗi người dùng cấp cho Google, dùng để gọi một cách an toàn các API của Google và truy cập vào dữ liệu người dùng.
  • Mã ủy quyền là một mã tạm thời do Google cấp để 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ừ một trình duyệt. Nền tảng phụ trợ của bạn trao đổi mã này để truy cập và làm mới mã thông báo.
  • Mã làm mới là một thông tin đăng nhập dài hạn cho mỗi người dùng do Google cấp. Mã này đượ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ột mã truy cập mới, hợp lệ ngay cả khi người dùng không hiện diện.
  • Phạm vi giới hạn mã thông báo ở một lượng dữ liệu người dùng nhất định và có giới hạn, hãy xem bài viết Phạm vi OAuth 2.0 cho API Google để tìm hiểu thêm.
  • Chế độ bật lên là luồng mã ủy 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 gọi lệnh gọi lại của bạn, sau đó sẽ chịu trách nhiệm gửi mã xác thực đến nền tảng của bạn, việc này phụ thuộc vào bạn như thế nào.
  • Chế độ chuyển hướng là luồng mã ủy 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 được chuyển hướng đến Google. Lệnh chuyển hướng thứ hai từ Google đến điểm cuối mã ủy quyền của nền tảng bao gồm mã.

Vòng đời mã thông báo do Google phát hành với vai trò là nhà phát hành. Thời lượng chính xác có thể thay đổi do nhiều yếu tố.

Quy trình OAuth 2.0

Hai luồng, mã ngầm định và mã uỷ quyền được thảo luận. Cả hai đều trả về một mã thông báo 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 mã ủy quyền để tăng cường 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ã thông báo 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ộ dễ dàng hơn, chẳng hạn như gửi lời nhắc qua SMS về cuộc họp sắp tới đã được lên lịch vào phút chót. Chọn mô hình ủy quyền sẽ giải thích chi tiết hơn về sự khác biệt giữa hai quy trình này.

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ý luồng ngầm ẩn để cho phép ứng dụng web trong trình duyệt nhanh chóng và dễ dàng lấy mã truy cập từ Google cần thiết để gọi API Google.
  • bắt đầu quy trình mã ủy quyền từ trình duyệt của người dùng.

Các bước phổ biến

Cả luồng mã ngầm định và mã ủy 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 thị hộp thoại đồng ý với người dùng và nếu cần thiết, trước tiên sẽ đăng nhập người dùng vào Tài khoản Google của họ.
  3. Người dùng này phê duyệt từng phạm vi được yêu cầu.

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

Khi sử dụng quy trình ngầm ẩn

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

Khi sử dụng quy trình mã ủy quyền

  • Google sẽ phản hồi bằng mã uỷ quyền cho mỗi người dùng:
    • Ở chế độ chuyển hướng, mã được trả về điểm cuối mã ủy quyền của nền tảng.
    • Ở chế độ bật lên, mã sẽ được trả về trình xử lý gọi lại của ứng dụng trong trình duyệt mà người dùng không cần phải 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 các máy chủ với Google, cuối cùng dẫn đến việc trả lại một mã thông báo làm mới cho mỗi người dùng và mã truy cập được trả về cho nền tảng của bạn.

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

Người dùng sẽ thấy 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à phạm vi yêu cầu, 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 được hiển thị. Khi một phạm vi được yêu cầu, không cần hộp đánh dấu nào để phê duyệt hoặc từ chối phạm vi.

Hộp thoại chấp thuận của người dùng với các nút Hủy hoặc Tiếp tục và một phạm vi duy nhất, không có hộp kiểm nào được hiển thị.

Hình 1: Hộp thoại đồng ý của người dùng với 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 yêu cầu nhiều phạm vi, từng hộp đánh dấu cần thiết để cho phép người dùng phê duyệt hoặc từ chối từng phạm vi.

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

Hình 2: Hộp thoại đồ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 phải có Tài khoản Google để ghi lại sự đồng ý và cấp mã thông báo 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 bớt phiền hà cho người dùng bằng cách giảm thiểu số bước cần thiết và cho phép bạn dễ dàng liên kết mã truy cập với từng tài khoản trên nền tảng của bạn.

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 Tài khoản Google đang hoạt động, nhờ đó, bạn không cần phải nhắc người dùng đăng nhập vào một Tài khoản Google khi tạo yêu cầu cấp quyền. Nếu bạn xác thực người dùng cho ứng dụng bằng các phương thức 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, họ vẫn phải đăng nhập vào Tài khoản Google để lấy sự đồng ý.

Việc thêm gợi ý đăng nhập trong quá trình khởi tạo ủy 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 hiển thị trình chọn tài khoản, tiết kiệm cho người dùng 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ề 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 gọi là quy trình ngầm ẩn, không cần liên kết mã thông báo làm mới với tài khoản người dùng và bộ nhớ an toàn để quản lý.

Ngoài ra, quy trình mã ủy quyền cũng yêu cầu hệ thống tài khoản người dùng. Mỗi mã thông báo làm mới cho mỗi người dùng phải được liên kết với một tài khoản cá nhân 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 chỉ dành riêng cho nền tảng của bạn và sẽ 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, 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.

Tùy chọn ủy quyền khác

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

Tương tự, đối với luồng mã ủy 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 trong phần Sử dụng OAuth 2.0 cho ứ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à nỗ lực phát triển đồng thời giảm thiểu rủi ro bảo mật, chẳng hạn như các rủi ro được mô tả trong Phương pháp hay nhất về bảo mật OAuth 2.0.