Các tài khoản được liên kết bằng quy trình mã uỷ quyền OAuth 2.0 theo tiêu chuẩn ngành.
OAuth 2.1 và PKCE cho nhân viên hỗ trợ
Đối với các tác nhân AI không trạng thái và quy trình đa phương thức, bạn nên thực thi OAuth 2.1.
- PKCE (Khoá bằng chứng để trao đổi mã): Phải được dùng để bảo mật quy trình sử dụng mã uỷ quyền, ngăn chặn các cuộc tấn công chặn.
- Không có luồng cấp quyền trực tiếp: Luồng cấp quyền trực tiếp cho phép hiển thị mã truy cập trong URL, đây là một rủi ro bảo mật đối với môi trường tác nhân.
Dịch vụ của bạn phải hỗ trợ các điểm cuối uỷ quyền và trao đổi mã thông báo tuân thủ OAuth 2.0/2.1.
Create the project
To create your project to use account linking:
- Go to the Google API Console.
- Click Create project.
- Enter a name or accept the generated suggestion.
- Confirm or edit any remaining fields.
- Click Create.
To view your project ID:
- Go to the Google API Console.
- Find your project in the table on the landing page. The project ID appears in the ID column.
Configure your OAuth Consent Screen
The Google Account Linking process includes a consent screen which tells users the application requesting access to their data, what kind of data they are asking for and the terms that apply. You will need to configure your OAuth consent screen before generating a Google API client ID.
- Open the OAuth consent screen page of the Google APIs console.
- If prompted, select the project you just created.
On the "OAuth consent screen" page, fill out the form and click the “Save” button.
Application name: The name of the application asking for consent. The name should accurately reflect your application and be consistent with the application name users see elsewhere. The application name will be shown on the Account Linking consent screen.
Application logo: An image on the consent screen that will help users recognize your app. The logo is shown on Account linking consent screen and on account settings
Support email: For users to contact you with questions about their consent.
Scopes for Google APIs: Scopes allow your application to access your user's private Google data. For the Google Account Linking use case, default scope (email, profile, openid) is sufficient, you don’t need to add any sensitive scopes. It is generally a best practice to request scopes incrementally, at the time access is required, rather than up front. Learn more.
Authorized domains: To protect you and your users, Google only allows applications that authenticate using OAuth to use Authorized Domains. Your applications' links must be hosted on Authorized Domains. Learn more.
Application Homepage link: Home page for your application. Must be hosted on an Authorized Domain.
Application Privacy Policy link: Shown on Google Account Linking consent screen. Must be hosted on an Authorized Domain.
Application Terms of Service link (Optional): Must be hosted on an Authorized Domain.
Figure 1. Google Account Linking Consent Screen for a fictitious Application, Tunery
Check "Verification Status", if your application needs verification then click the "Submit For Verification" button to submit your application for verification. Refer to OAuth verification requirements for details.
Triển khai máy chủ OAuth
Việc triển khai máy chủ OAuth 2.0 của quy trình mã uỷ quyền bao gồm 2 điểm cuối mà dịch vụ của bạn cung cấp bằng HTTPS. Điểm cuối đầu tiên là điểm cuối uỷ quyền, chịu trách nhiệm tìm hoặc lấy sự đồng ý của người dùng để truy cập vào dữ liệu. Điểm cuối uỷ quyền 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. Điểm cuối thứ hai là điểm cuối trao đổi mã thông báo. Điểm cuối này được dùng để lấy các chuỗi được mã hoá (gọi là mã thông báo) cho phép người dùng truy cập vào dịch vụ của bạn.
Khi một ứng dụng của Google cần gọi một trong các API của dịch vụ, Google sẽ sử dụng các điểm cuối này cùng nhau để được người dùng của bạn cho phép gọi các API này thay cho họ.
Liên kết Tài khoản Google: Quy trình sử dụng mã uỷ quyền OAuth
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 bên trong quy trình OAuth 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 danh tính/dịch vụ.
| 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ã uỷ quyền, trao đổi mã này để lấy mã thông báo và lưu trữ mã thông báo 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 và nhận được sự đồng ý của họ để chia sẻ quyền truy cập vào dữ liệu của họ với Google. |
| Điểm cuối trao đổi mã thông báo | Máy chủ uỷ quyền | Xác thực mã uỷ quyền và mã làm mới, đồng thời cấp mã truy cập cho Máy chủ của 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 bằng các giá trị code và state. |
Một phiên quy trình sử dụng mã uỷ quyền OAuth 2.0 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. Nếu quy trình bắt đầu trên một thiết bị chỉ có giọng nói cho một Thao tác, thì Google sẽ chuyển việc thực thi sang điện thoại.
- 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ã uỷ quyền và trả mã đó 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ã uỷ quyền được đính kèm vào yêu cầu.
- Google gửi mã uỷ quyền đến điểm cuối trao đổi mã thông báo của bạn. Điểm cuối này xác minh tính xác thực của mã và trả về một mã truy cập và một mã làm mới. Mã truy cập là một mã ngắn hạn mà dịch vụ của bạn chấp nhận làm thông tin đăng nhập để truy cập vào các API. Mã làm mới là một mã thông báo có thời hạn sử dụng dài mà Google có thể lưu trữ và sử dụng để lấy mã truy cập mới khi mã truy cập hết hạn.
- Sau khi người dùng hoàn tất quy trình liên kết tài khoản, mọi yêu cầu tiếp theo được gửi từ Google đều chứa mã truy cập.
Công thức triển khai
Hãy làm theo các bước sau để triển khai quy trình Mã uỷ quyền.
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àcode.
- 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ã uỷ quyền:
- Tạo một mã uỷ quyền duy nhất, không đoán được, được liên kết với người dùng và ứng dụng.
- Đặt thời gian hết hạn của mã là khoảng 10 phút.
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ố truy vấn sau:
code: Mã uỷ quyền mà bạn đã tạo.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
Bước 2: Xử lý yêu cầu trao đổi mã thông báo
Điểm cuối trao đổi mã thông báo của bạn xử lý hai loại yêu cầu: trao đổi mã để lấy mã thông báo và làm mới mã truy cập đã hết hạ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 trao đổi mã thông báo.
A. Đổi mã uỷ quyền lấy mã thông báo
Khi nhận được mã uỷ quyền, Google sẽ gọi điểm cuối trao đổi mã thông báo của bạn (POST) để truy xuất mã thông báo.
Xác thực yêu cầu:
- Xác minh
client_idvàclient_secret. - Xác minh rằng mã uỷ quyền còn hiệu lực và chưa hết hạn.
- Xác nhận rằng
redirect_urikhớp với giá trị được dùng ở Bước 1. - Nếu xác thực không thành công, hãy trả về một HTTP
400 Bad Requestcó{"error": "invalid_grant"}.
- Xác minh
Phát hành mã thông báo:
- Tạo một
refresh_tokencó thời gian tồn tại lâu dài và mộtaccess_tokencó thời gian tồn tại ngắn (thường là 1 giờ). - Trả về một
200 OKHTTP với phản hồi mã thông báo JSON tiêu chuẩn.
- Tạo một
B. Làm mới mã truy cập
Khi mã truy cập hết hạn, Google sẽ yêu cầu một mã mới bằng mã làm mới.
Xác thực yêu cầu:
- Xác minh
client_id,client_secretvàrefresh_token. - Nếu xác thực không thành công, hãy trả về một HTTP
400 Bad Requestcó{"error": "invalid_grant"}.
- Xác minh
Phát hành mã truy cập mới:
- Tạo một
access_tokencó thời hạn ngắn mới. - Trả về một
200 OKHTTP với phản hồi mã thông báo JSON (bạn có thể thêm mã làm mới mới).
- Tạo một
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.
Xác thực quá trình triển khai
Bạn có thể xác thực việc triển khai bằng cách sử dụng công cụ OAuth 2.0 Playground.
Trong công cụ này, hãy thực hiện các bước sau:
- Nhấp vào Configuration để mở cửa sổ OAuth 2.0 Configuration (Cấu hình OAuth 2.0).
- Trong trường OAuth flow (Quy trình OAuth), hãy chọn Client-side (Phía máy khách).
- Trong trường OAuth Endpoints (Điểm cuối OAuth), hãy chọn Custom (Tuỳ chỉnh).
- Chỉ định điểm cuối OAuth 2.0 và mã ứng dụng khách mà bạn đã chỉ định cho Google trong các trường tương ứng.
- Trong phần Step 1 (Bước 1), đừng chọn phạm vi nào của Google. Thay vào đó, hãy để trống trường này hoặc nhập một phạm vi hợp lệ cho máy chủ của bạn (hoặc một chuỗi tuỳ ý nếu bạn không sử dụng phạm vi OAuth). Khi hoàn tất, hãy nhấp vào Authorize APIs (Cấp quyền cho API).
- Trong phần Step 2 (Bước 2) và Step 3 (Bước 3), hãy thực hiện quy trình OAuth 2.0 và xác minh rằng mỗi bước đều hoạt động như dự kiến.
Bạn có thể xác thực việc triển khai bằng cách sử dụng công cụ Google Account Linking Demo.
Trong công cụ này, hãy thực hiện các bước sau:
- Nhấp vào nút Sign in with Google (Đăng nhập bằng Google).
- Chọn tài khoản mà bạn muốn liên kết.
- Nhập mã dịch vụ.
- Bạn có thể nhập một hoặc nhiều phạm vi mà bạn sẽ yêu cầu quyền truy cập.
- Nhấp vào Start Demo (Bắt đầu bản minh hoạ).
- Khi được nhắc, hãy xác nhận rằng bạn có thể đồng ý và từ chối yêu cầu liên kết.
- Xác nhận rằng bạn được chuyển hướng đến nền tảng của mình.