Chúng tôi sẽ ngừng cung cấp Thư viện nền tảng JavaScript đăng nhập bằng Google cho web. Bạn sẽ không thể tải thư viện này xuống sau ngày 31 tháng 3 năm 2023. Thay vào đó, hãy sử dụng Dịch vụ Google Identity mới cho Web.
Theo mặc định, mã ứng dụng khách mới tạo hiện bị chặn sử dụng Thư viện nền tảng cũ, các mã ứng dụng khách hiện có sẽ không bị ảnh hưởng. Những Mã ứng dụng khách mới được tạo trước ngày 29 tháng 7 năm 2022 có thể đặt `plugin_name` cho phép sử dụng Thư viện Google Platform.

Di chuyển từ GoogleAuthUtil và Plus.API

Nếu trước đây bạn đã tích hợp tính năng Đăng nhập bằng Google thông qua GoogleAuthUtil.getToken hoặc Plus.API, thì bạn nên chuyển sang API Đăng nhập mới nhất để tăng cường bảo mật và trải nghiệm tốt hơn cho người dùng.

Di chuyển từ mẫu mã truy cập chống lại

Bạn không nên gửi mã thông báo truy cập có được bằng GoogleAuthUtil.getToken đến máy chủ phụ trợ của bạn dưới dạng xác nhận danh tính, vì bạn không thể dễ dàng xác minh rằng mã thông báo đã được cấp cho ứng dụng phụ trợ của bạn. Điều này sẽ khiến bạn dễ bị chèn mã truy cập từ kẻ tấn công.

Ví dụ: nếu mã Android của bạn có vẻ như như ví dụ dưới đây, bạn nên di chuyển ứng dụng của mình sang các phương pháp hay nhất hiện tại.

Mã Android

Trong ví dụ này, yêu cầu mã truy cập sử dụng oauth2: cùng với một chuỗi phạm vi làm thông số scope cho lệnh gọi GoogleAuthUtil.getToken (oauth2:https://www.googleapis.com/auth/plus.login).

Thay vì xác thực bằng mã truy cập đã nhận được bằng GoogleAuthUtil.getToken, hãy sử dụng luồng mã nhận dạng hoặc luồng mã xác thực.

Di chuyển sang luồng mã thông báo nhận dạng

Nếu bạn chỉ cần mã nhận dạng, địa chỉ email, tên hoặc URL ảnh hồ sơ của người dùng, hãy sử dụng quy trình mã thông báo nhận dạng.

Để chuyển sang quy trình mã thông báo mã nhận dạng, hãy thực hiện các thay đổi sau:

Phía máy khách trên Android

  • Hãy xóa quyền GET_ACCOUNTS (Danh bạ) nếu bạn yêu cầu
  • Chuyển mã bất kỳ bằng GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() hoặc AccountManager.newChooseAccountIntent() sang Auth.GOOGLE_SIGN_IN_API có cấu hình GoogleSignInOptions.Builder.requestIdToken(...).

Phía máy chủ

Di chuyển sang luồng mã xác thực máy chủ

Nếu máy chủ của bạn cần truy cập các API khác của Google, chẳng hạn như Google Drive, YouTube, hoặc Danh bạ, hãy sử dụng luồng mã xác thực máy chủ.

Để chuyển sang quy trình mã xác thực máy chủ, hãy thực hiện các thay đổi sau:

Phía máy khách trên Android

  • Hãy xóa quyền GET_ACCOUNTS (Danh bạ) nếu bạn yêu cầu
  • Chuyển mã bất kỳ bằng GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() hoặc AccountManager.newChooseAccountIntent() sang Auth.GOOGLE_SIGN_IN_API có cấu hình GoogleSignInOptions.Builder.requestServerAuthCode(...).

Phía máy chủ

Bạn vẫn có thể chia sẻ logic truy cập vào API giữa các điểm cuối cũ và mới. Ví dụ:

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...);
String accessToken = tokenResponse.getAccessToken();
String refreshToken = tokenResponse.getRefreshToken();
Long expiresInSeconds = tokenResponse.getExpiresInSeconds();

// Shared by your old and new implementation, old endpoint can pass null for refreshToken
private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) {
   GoogleCredential credential = new GoogleCredential.Builder()
           .setTransPort(...)
           ...
           .build();
   credential.setAccessToken(accessToken);
   credential.setExpiresInSeconds(expiresInSeconds);
   credential.setRefreshToken(refreshToken);
}

Di chuyển từ luồng mã thông báo GoogleAuthUtil ID

Nếu sử dụng GoogleAuthUtil để nhận mã thông báo mã nhận dạng, bạn nên chuyển sang Luồng mã thông báo mã nhận dạng API mới.

Ví dụ: nếu mã Android của bạn có dạng như ví dụ sau, bạn nên di chuyển:

Mã Android

Trong ví dụ này, các yêu cầu mã thông báo mã nhận dạng sử dụng audience:server:client_id cùng với mã ứng dụng khách trên máy chủ web của bạn làm thông số "phạm vi" cho lệnh gọi GoogleAuthUtil.getToken (audience:server:client_id:9414861317621.apps.googleusercontent.com).

Luồng mã thông báo API đăng nhập mới có các lợi ích sau:

  • Trải nghiệm đăng nhập bằng một lần chạm được sắp xếp hợp lý
  • Máy chủ của bạn có thể nhận được thông tin hồ sơ người dùng mà không cần thực hiện lệnh gọi mạng khác

Để chuyển sang quy trình mã thông báo mã nhận dạng, hãy thực hiện các thay đổi sau:

Phía máy khách trên Android

  • Hãy xóa quyền GET_ACCOUNTS (Danh bạ) nếu bạn yêu cầu
  • Chuyển mã bất kỳ bằng GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() hoặc AccountManager.newChooseAccountIntent() sang Auth.GOOGLE_SIGN_IN_API có cấu hình GoogleSignInOptions.Builder.requestIdToken(...).

Phía máy chủ

Khác với API đăng nhập, mã thông báo ID tuân thủ thông số kỹ thuật Connect Connect, không giống như GoogleAuthUtil.getToken. Định dạng này sử dụng định dạng không dùng nữa. Cụ thể, tài khoản phát hành hiện là https://accounts.google.com, với giản đồ https.

Trong quá trình di chuyển, máy chủ của bạn cần xác minh mã thông báo nhận dạng từ cả ứng dụng Android cũ và mới. Để xác minh cả hai định dạng của mã thông báo, hãy thực hiện thay đổi tương ứng với thư viện ứng dụng mà bạn sử dụng (nếu bạn sử dụng một định dạng):

  • Java (Thư viện ứng dụng API của Google): nâng cấp lên 1.21.0 trở lên
  • PHP (Thư viện ứng dụng API của Google): nếu bạn sử dụng phiên bản 1, hãy nâng cấp lên 1.1.6 hoặc mới hơn; nếu bạn sử dụng phiên bản 2, hãy nâng cấp lên 2.0.0-RC1 hoặc phiên bản mới hơn
  • Node.js: nâng cấp lên 0.9.7 hoặc mới hơn
  • Python hoặc các phương pháp triển khai của riêng bạn: chấp nhận cả hai nhà phát hành này: https://accounts.google.comaccounts.google.com

Di chuyển từ luồng mã xác thực máy chủ GoogleAuthUtil

Nếu sử dụng GoogleAuthUtil để lấy mã xác thực máy chủ, bạn nên chuyển sang luồng mã xác thực API Đăng nhập mới.

Ví dụ: nếu mã Android của bạn có dạng như ví dụ sau, bạn nên di chuyển:

Mã Android

Trong ví dụ này, các yêu cầu mã xác thực máy chủ sử dụng oauth2:server:client_id + client ID cho máy chủ web của bạn làm thông số scope cho lệnh gọi GoogleAuthUtil.getToken (oauth2:server:client_id:9414861317621.apps.googleusercontent.com).

Luồng mã xác thực API đăng nhập mới có các lợi ích sau:

  • Trải nghiệm đăng nhập bằng một lần chạm được sắp xếp hợp lý
  • Nếu bạn làm theo hướng dẫn di chuyển bên dưới, máy chủ của bạn có thể nhận được mã thông báo nhận dạng chứa thông tin hồ sơ của người dùng khi bạn trao đổi mã xác thực

Để chuyển sang quy trình mã xác thực mới, hãy thực hiện các thay đổi sau:

Phía máy khách trên Android

  • Hãy xóa quyền GET_ACCOUNTS (Danh bạ) nếu bạn yêu cầu
  • Chuyển mã bất kỳ bằng GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() hoặc AccountManager.newChooseAccountIntent() sang Auth.GOOGLE_SIGN_IN_API có cấu hình GoogleSignInOptions.Builder.requestServerAuthCode(...).

Phía máy chủ

Giữ lại mã hiện tại của bạn, nhưng chỉ định https://oauth2.googleapis.com/token làm điểm cuối của máy chủ mã thông báo khi tạo đối tượng GoogleAuthorizationCodeTokenRequest để có thể nhận được mã thông báo mã bằng email của người dùng, mã người dùng và thông tin hồ sơ mà không cần gọi mạng khác. Điểm cuối này hoàn toàn tương thích ngược và mã bên dưới sẽ hoạt động đối với mã xác thực máy chủ được truy xuất từ cả cách triển khai ứng dụng Android cũ và mới của bạn.

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                transport,
                jsonFactory,
                // Use below for tokenServerEncodedUrl parameter
                "https://oauth2.googleapis.com/token",
                clientSecrets.getDetails().getClientId(),
                clientSecrets.getDetails().getClientSecret(),
                authCode,
                REDIRECT_URI)
               .execute();

...

// You can also get an ID token from auth code exchange.
GoogleIdToken googleIdToken = tokenResponse.parseIdToken();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(SERVER_CLIENT_ID))
        .setIssuer("https://accounts.google.com")
        .build();
// Refer to ID token documentation to see how to get data from idToken object.
GoogleIdToken idToken = verifier.verify(idTokenString);
...