Để 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ụ.
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_token và state 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:
- 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).
- 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.
- 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:
Xác thực yêu cầu:
- Xác nhận rằng
client_idkhớp với Mã ứng dụng khách được chỉ định cho Google. - Xác nhận rằng
redirect_urikhớ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_typelàtoken.
- Xác nhận rằng
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.
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.
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.
- Chuyển hướng trình duyệt đến URL được cung cấp trong
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:
- Đăng nhập vào tài khoản được liên kết bằng tính năng Google One Chạm.
- Gói thuê bao dễ dàng trên Android TV.
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:
- 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.
- 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: 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.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
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:
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.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }phản hồi của thiết bị đầu cuối userinfo subMã 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_nameKhông bắt buộc: Tên của người dùng. family_nameKhông bắt buộc: Họ của người dùng. nameKhông bắt buộc: Tên đầy đủ của người dùng. pictureKhông bắt buộc: Ảnh hồ sơ của người dùng.