Để 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
Handle userinfo requests
The userinfo endpoint is an OAuth 2.0 protected resource that return claims about the linked user. Implementing and hosting the userinfo endpoint is optional, except for the following use cases:
- Linked Account Sign-In with Google One Tap.
- Frictionless subscription on AndroidTV.
After the access token has been successfully retrieved from your token endpoint, Google sends a request to your userinfo endpoint to retrieve basic profile information about the linked user.
| userinfo endpoint request headers | |
|---|---|
Authorization header |
The access token of type Bearer. |
For example, if your userinfo endpoint is available at
https://myservice.example.com/userinfo, a request might look like the following:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
For your userinfo endpoint to handle requests, do the following steps:
- Extract access token from the Authorization header and return information for the user associated with the access token.
- If the access token is invalid, return an HTTP 401 Unauthorized error with using the
WWW-AuthenticateResponse Header. Below is an example of a userinfo error response: If a 401 Unauthorized, or any other unsuccessful error response is returned during the linking process, the error will be non-recoverable, the retrieved token will be discarded and the user will have to initiate the linking process again.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
If the access token is valid, return and HTTP 200 response with the following JSON object in the body of the HTTPS response:
If your userinfo endpoint returns an HTTP 200 success response, the retrieved token and claims are registered against the user's Google account.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }userinfo endpoint response subA unique ID that identifies the user in your system. emailEmail address of the user. given_nameOptional: First name of the user. family_nameOptional: Last name of the user. nameOptional: Full name of the user. pictureOptional: Profile picture of the user.