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

Nếu bạn mới sử dụng hoặc chưa uỷ quyền về Dịch vụ nhận dạng của Google, 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 tiêu chuẩn. Ứng dụng web của bạn (đang chạy trong trình duyệt của người dùng) sẽ sử dụng thư viện này để quản lý luồng ngầm ẩn OAuth 2.0 hoặc để bắt đầu luồng mã uỷ quyền kết thúc trên nền tảng phụ trợ của bạn.

Phạm vi chỉ 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ỉ dùng các phạm vi này, hãy cân nhắc xem Mã thông báo mã JWT và tính năng Đăng nhập bằng Google để đăng ký và đăng nhập của 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 và đơ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

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 OAuth 2.0 và các tiêu chuẩn IETF như RFC6749. Các thuật ngữ sau được sử dụng xuyên suốt hướng dẫn uỷ quyền:

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

Thời gian tồn tại của mã thông báo do Google, với tư cách là nhà phát hành, thiết lập. Do nhiều yếu tố, thời lượng chính xác có thể khác nhau.

Luồng OAuth 2.0

Hai luồng, mã ngầm ẩn và mã uỷ quyền đượ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 mã uỷ quyền vì cách này giúp cải thiện khả nă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ã truy cập khi không có người dùng, giúp nền tảng của bạn dễ dàng thực hiện các hành động không đồng bộ 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 uỷ quyền giải thích chi tiết hơn sự khác biệt giữa hai quy trình.

Thư viện JavaScript của 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 trên 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 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 phổ biến

Cả quy trình mã ngầm ẩn và quy trình 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 hiển thị hộp thoại đồng ý cho người dùng và đăng nhập người dùng vào Tài khoản Google của họ trước tiên 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 quy trình kết thúc qua các bước khác nhau.

Khi sử dụng luồng 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ả đồ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ã xác thực

  • 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 của mã uỷ quyền của nền tảng.
    • Ở chế độ bật lên, mã đượ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 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 từ máy chủ đến máy chủ với Google, kết quả là mã làm mới cho mỗi người dùng và mã truy cập được trả về nền tảng của bạn.

Trước khi nhận được mã truy cập, người dùng phải đồng ý để ứng dụng của bạn truy cập vào các phạm vi yêu cầu. Để làm như vậy, Google sẽ hiển thị hộp thoại đồng ý trong Bước 2 ở trên và ghi lại kết quả vào 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à phạm vi yêu cầu của ứng dụng sẽ hiển thị cho người dùng cùng với tuỳ 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 được hiển thị. Khi yêu cầu một phạm vi, bạn không cần phải đánh dấu vào hộp để 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 hiển thị.

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, các hộp đánh dấu riêng lẻ là 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 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 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 phải 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 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ách làm này sẽ làm giảm sự phiền toái của người dùng bằng cách giảm thiểu số bước bắt buộc, đồng thời cho phép bạn dễ dàng liên kết mã truy cập với các tài khoản cá nhân trên nền tảng của bạn (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 Tài khoản Google đang hoạt động, nhờ đó, sau này người dùng sẽ không cần phải nhắc người dùng đăng nhập vào Tài khoản Google khi đưa ra yêu cầu uỷ quyền. Nếu bạn chọn xác thực người dùng với ứng dụng của mình bằng các phương thức khác, chẳng hạn như tên người dùng, 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 ý.

Thêm gợi ý đăng nhập trong quá trình khởi chạy uỷ quyền (thường là địa chỉ email Tài khoản Google của người dùng) cho phép Google bỏ qua việc hiển thị trình chọn tài khoản, giúp người dùng tiết kiệm được một bước. Thông tin xác thực Mã thông báo mã nhận dạng mà 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 chỉ có thể dựa vào Google để xác thực người dùng, tức là lựa 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à luồng ngầm ẩn, bạn không cần liên kết mã làm mới với bộ nhớ an toàn cho tài khoản người dùng và hoạt động quản lý.

Ngoài ra, quy trình mã uỷ quyền còn yêu cầu bạn phải có hệ thống tài khoản người dùng. Bạn phải liên kết mã làm mới cho mỗi người dùng với một tài khoản cá nhân trên nền tảng phụ trợ 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à tuỳ chỉnh 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 của họ.

Ứng dụng web hoặc nền tảng web của bạn có thể gọi hàm google.accounts.oauth2.revoke để thu hồi mã thông báo và xoá sự đồng ý của người dùng (không bắt buộc). Đây là thông tin hữu ích khi người dùng xoá tài khoản của họ khỏi nền tảng của bạn.

Các cách uỷ quyền khác

Ngoài ra, các trình duyệt có thể lấy mã truy cập thông qua quy trình ngầm ẩn 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 dành cho Ứng dụng web phía máy khách.

Tương tự, đối với quy trình mã uỷ quyền, bạn có thể chọn triển khai phương thức của riêng mình và làm theo các bước nêu trong bài viết 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 phát triển và công sức, đồng thời giảm thiểu rủi ro bảo mật như các rủi ro về bảo mật như mô tả trong bài viết Phương pháp hay nhất hiện tại về bảo mật OAuth 2.0.