Chúng tôi đang ngừng Google Đăng trong JavaScript Thư viện Cương lĩnh web . Để thẩm định và người dùng đăng nhập, sử dụng dịch vụ nhận dạng Google SDK mới cho cả webAndroid thay vì .

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 bằng GoogleAuthUtil.getToken hoặc Plus.API , bạn nên chuyển sang API đăng nhập mới nhất để bảo mật cao hơn và trải nghiệm người dùng tốt hơn.

Di chuyển từ mẫu chống mã thông báo truy cập

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 mình như một 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 chương trình phụ trợ của bạn, khiến bạn dễ bị kẻ tấn công chèn mã thông báo truy cập.

Ví dụ: nếu mã Android của bạn trông giống như ví dụ bên dưới, bạn nên 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ã thông báo truy cập sử dụng oauth2: cộng với một chuỗi scope tham số scope cho GoogleAuthUtil.getToken gọi oauth2:https://www.googleapis.com/auth/plus.login ( oauth2:https://www.googleapis.com/auth/plus.login ).

Thay vì xác thực bằng mã truy cập có được bằng GoogleAuthUtil.getToken , hãy sử dụng quy trình mã thông báo ID hoặc quy trình mã xác thực.

Di chuyển sang luồng mã thông báo ID

Nếu tất cả những gì bạn cần là ID, đị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 ID .

Để di chuyển sang luồng mã thông báo ID, hãy thực hiện các thay đổi sau:

Phía máy khách Android

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

Phía máy chủ

  • Tạo một điểm cuối mới cho xác thực mã thông báo ID
  • Tắt điểm cuối cũ sau khi các ứng dụng khách của bạn được di chuyển

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ủ .

Để di chuyển sang luồng 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 Android

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

Phía máy chủ

Bạn vẫn có thể chia sẻ logic truy cập API giữa các điểm cuối cũ và mới của mình. 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 ID GoogleAuthUtil

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

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

Mã Android

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

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

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

Để di chuyển sang luồng mã thông báo ID, hãy thực hiện các thay đổi sau:

Phía máy khách Android

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

Phía máy chủ

API đăng nhập mới phát hành mã thông báo ID tuân theo thông số kỹ thuật của OpenID Connect, không giống như GoogleAuthUtil.getToken , sử dụng định dạng không dùng nữa. Cụ thể, nhà 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 ID từ cả ứng dụng Android cũ và mới của bạn. Để 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 máy khách bạn sử dụng (nếu bạn sử dụng một):

  • Java (Thư viện ứng dụng API của Google): nâng cấp lên 1.21.0 hoặc mới hơn
  • PHP (Thư viện ứng dụng API của Google): nếu bạn sử dụng v1, hãy nâng cấp lên 1.1.6 hoặc mới hơn; nếu bạn sử dụng v2, hãy nâng cấp lên 2.0.0-RC1 hoặc 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 triển khai của riêng bạn: chấp nhận cả hai tổ chức 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 bạn sử dụng GoogleAuthUtil để lấy mã xác thực máy chủ, bạn nên chuyển sang quy trình mã xác thực API đăng nhập mới.

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

Mã Android

Trong ví dụ này, yêu cầu mã xác thực máy chủ sử dụng oauth2:server:client_id + ID ứng dụng khách cho máy chủ web của bạn làm tham số scope cho GoogleAuthUtil.getToken gọi oauth2:server:client_id:9414861317621.apps.googleusercontent.com ( 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 một lần chạm được tổ chức 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 ID chứa thông tin hồ sơ của người dùng khi bạn thực hiệ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 khách hàng Android

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

Phía máy chủ

Giữ 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 để bạn có thể nhận mã thông báo ID với email, ID người dùng và thông tin hồ sơ của người dùng mà không cần cần cho một cuộc gọi mạng khác. Điểm cuối này hoàn toàn tương thích ngược và mã dưới đây sẽ hoạt động đối với mã xác thực máy chủ được truy xuất từ ​​cả triển khai ứng dụng khách 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);
...