Sử dụng tính năng Liên kết Tài khoản Google với OAuth (Luồng ngầm định – Đã lưu trữ)

Để hỗ trợ quy trình ngầm định OAuth 2.0, dịch vụ của bạn cung cấp một điểm cuối uỷ quyền bằng HTTPS. Điểm cuối này chịu trách nhiệm xác thực và lấy sự đồng ý của người dùng đối với quyền truy cập dữ liệu. Điểm cuối uỷ quyền sẽ trình bày một giao diện người dùng đăng nhập cho những người dùng chưa đăng nhập và ghi lại sự đồng ý đối với quyền truy cập được yêu cầu.

Khi một ứng dụng của Google cần gọi một trong các API được uỷ quyền của dịch vụ, Google sẽ dùng điểm cuối này để xin phép người dùng của bạn gọi các API này thay cho họ.

Liên kết tài khoản Google: Quy trình OAuth ngầm định

Sơ đồ trình tự sau đây trình bày chi tiết các hoạt động tương tác giữa Người dùng, Google và các điểm cuối của dịch vụ.

Người dùng Ứng dụng Google / Trình duyệt Điểm cuối xác thực 1. Người dùng bắt đầu liên kết 2. Chuyển hướng đến Điểm cuối uỷ quyền (GET) client_id, redirect_uri, state, scope 3. Hiển thị màn hình đăng nhập và màn hình đồng ý 4. Người dùng xác thực và cấp sự đồng ý 5. Chuyển hướng trở lại Google bằng mã thông báo (GET) access_token, state 6. Lưu trữ mã thông báo người dùng 7. Truy cập vào tài nguyên của người dùng
Hình 1. Trình tự các sự kiện trong luồng cấp quyền trực tiếp OAuth 2.0 để liên kết Tài khoản Google.

Vai trò và trách nhiệm

Bảng sau đây xác định vai trò và trách nhiệm của các tác nhân trong luồng cấp quyền trực tiếp OAuth của tính năng liên kết Tài khoản Google (GAL). Xin lưu ý rằng trong GAL, Google đóng vai trò là Ứng dụng OAuth, trong khi dịch vụ của bạn đóng vai trò là Nhà cung cấp dịch vụ/danh tính.

Người thực hiện / Thành phần Vai trò GAL Yêu cầu của công việc
Ứng dụng / Máy chủ của Google Ứng dụng OAuth Khởi tạo quy trình, nhận mã truy cập bằng cách sử dụng lệnh chuyển hướng của trình duyệt và lưu trữ mã này một cách an toàn để truy cập vào các API của dịch vụ.
Điểm cuối uỷ quyền của bạn Máy chủ uỷ quyền Xác thực người dùng, xin sự đồng ý của họ và cấp mã truy cập có thời hạn sử dụng lâu dài trực tiếp cho Google.
URI chuyển hướng của Google Điểm cuối gọi lại Nhận lệnh chuyển hướng người dùng từ dịch vụ uỷ quyền của bạn với các giá trị access_tokenstate trong đoạn URL.

Một phiên quy trình ngầm định OAuth 2.0 điển hình do Google khởi tạo có quy trình như sau:

  1. Google sẽ mở điểm cuối uỷ quyền của bạn trong trình duyệt của người dùng. Người dùng đăng nhập (nếu chưa đăng nhập) và cấp cho Google quyền truy cập vào dữ liệu của họ bằng API của bạn (nếu họ chưa cấp quyền).
  2. Dịch vụ của bạn tạo một mã truy cập và trả mã này về cho Google. Để làm như vậy, hãy chuyển hướng trình duyệt của người dùng trở lại Google bằng mã truy cập được đính kèm vào yêu cầu.
  3. Google gọi các API của dịch vụ và đính kèm mã truy cập với từng yêu cầu. Dịch vụ của bạn xác minh rằng mã truy cập cấp cho Google quyền truy cập vào API, sau đó hoàn tất lệnh gọi API.

Công thức triển khai

Hãy làm theo các bước sau để triển khai luồng cấp quyền trực tiếp.

Bước 1: Xử lý yêu cầu uỷ quyền

Khi Google bắt đầu liên kết tài khoản, Google sẽ chuyển hướng người dùng đến điểm cuối uỷ quyền của bạn. Để biết các hợp đồng giao thức và yêu cầu về tham số chi tiết, hãy xem Điểm cuối uỷ quyền.

Để xử lý yêu cầu, hãy thực hiện các thao tác sau:

  1. Xác thực yêu cầu:

    • Xác nhận rằng client_id khớp với Mã ứng dụng khách được chỉ định cho Google.
    • Xác nhận rằng redirect_uri khớp với URL chuyển hướng dự kiến của Google: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • Xác minh rằng response_typetoken.
  2. Xác thực người dùng:

    • Kiểm tra xem người dùng đã đăng nhập vào dịch vụ của bạn hay chưa.
    • Nếu người dùng chưa đăng nhập, hãy nhắc họ hoàn tất quy trình đăng nhập hoặc đăng ký của bạn.
  3. Tạo mã truy cập:

    • Tạo mã truy cập duy nhất, không đoán được, được liên kết với người dùng và ứng dụng.
  4. Chuyển hướng trở lại Google:

    • Chuyển hướng trình duyệt đến URL được cung cấp trong redirect_uri.
    • Thêm các tham số sau vào phân mảnh của URL (dấu băm):
      • access_token: Mã truy cập mà bạn đã tạo.
      • token_type: Phải là bearer.
      • state: Giá trị trạng thái chưa được sửa đổi nhận được từ Google.
Xử lý các yêu cầu thông tin người dùng

Điểm cuối userinfo là một tài nguyên được bảo vệ bằng OAuth 2.0. Tài nguyên này trả về các thông báo xác nhận quyền sở hữu về người dùng được liên kết. Việc triển khai và lưu trữ điểm cuối userinfo là không bắt buộc, ngoại trừ các trường hợp sử dụng sau:

Sau khi đã truy xuất thành công mã truy cập từ điểm cuối của mã thông báo, Google sẽ gửi yêu cầu đến điểm cuối userinfo của bạn để truy xuất thông tin hồ sơ cơ bản về người dùng được liên kết.

tiêu đề của yêu cầu điểm cuối userinfo
Authorization header Mã truy cập thuộc loại Bearer.

Ví dụ: nếu điểm cuối userinfo của bạn có sẵn tại https://myservice.example.com/userinfo, một yêu cầu có thể có dạng như sau:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

Để điểm cuối userinfo xử lý các yêu cầu, hãy làm theo các bước sau:

  1. Trích xuất mã truy cập từ tiêu đề Uỷ quyền và trả về thông tin cho người dùng được liên kết với mã truy cập.
  2. Nếu mã truy cập không hợp lệ, hãy trả về lỗi HTTP 401 unauthorized (Không được phép sử dụng tiêu đề phản hồi WWW-Authenticate). Dưới đây là ví dụ về phản hồi khi xảy ra lỗi thông tin người dùng:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Nếu phản hồi 401 Trái phép hoặc bất kỳ lỗi không thành công nào khác được trả về trong quá trình liên kết, thì lỗi này sẽ không khôi phục được, mã thông báo đã truy xuất sẽ bị loại bỏ và người dùng sẽ phải bắt đầu lại quy trình liên kết.
  3. Nếu mã truy cập hợp lệ, hãy trả về và phản hồi HTTP 200 kèm theo đối tượng JSON sau trong phần nội dung của HTTPS trả lời:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    Nếu điểm cuối userinfo của bạn trả về phản hồi thành công HTTP 200, thì mã thông báo và các thông báo xác nhận quyền sở hữu đã truy xuất sẽ được đăng ký vào Tài khoản Google của người dùng.

    phản hồi của thiết bị đầu cuối userinfo
    sub Mã nhận dạng duy nhất giúp nhận dạng người dùng trong hệ thống của bạn.
    email Địa chỉ email của người dùng.
    given_name Không bắt buộc: Tên của người dùng.
    family_name Không bắt buộc: Họ của người dùng.
    name Không bắt buộc: Tên đầy đủ của người dùng.
    picture Không bắt buộc: Ảnh hồ sơ của người dùng.