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 phiên bản mới nhất
API Đăng nhập giúp tăng cường bảo mật và nâng cao trải nghiệm người dùng.
Di chuyển từ mẫu chống mã thông báo truy cập
Bạn không được gửi mã truy cập nhận được bằng GoogleAuthUtil.getToken
cho
máy chủ phụ trợ của bạn như một lời khẳng định danh tính, vì bạn không thể dễ dàng xác minh
mã thông báo đã được cấp đến phần phụ trợ của bạn, khiến bạn dễ bị chèn mã
mã truy cập của kẻ tấn công.
Ví dụ: nếu mã Android của bạn trông giống như ví dụ dưới đây, bạn nên di chuyển ứng dụng của bạn sang các phương pháp hay nhất hiện tại.
Trong ví dụ này, các 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 tham số
Tham 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 có được bằng
GoogleAuthUtil.getToken
, sử dụng quy trình mã thông báo nhận dạng hoặc quy trình mã xác thực.
Di chuyển sang quy trình mã thông báo giá trị nhận dạng
Nếu tất cả những gì bạn cần là URL, địa chỉ email, tên hoặc ảnh hồ sơ của người dùng, hãy sử dụng quy trình mã thông báo mã nhận dạng.
Để di chuyển sang quy trình mã thông báo giá trị nhận dạng, hãy thực hiện các thay đổi sau:
Phía máy khách Android
- Xoá quyền
GET_ACCOUNTS
(Danh bạ) nếu bạn yêu cầu - Chuyển đổi mã bất kỳ bằng
GoogleAuthUtil
,Plus.API
AccountPicker.newChooseAccountIntent()
hoặcAccountManager.newChooseAccountIntent()
đếnAuth.GOOGLE_SIGN_IN_API
bằng Cấu hìnhGoogleSignInOptions.Builder.requestIdToken(...)
.
Phía máy chủ
- Tạo điểm cuối mới để xác thực mã thông báo giá trị nhận dạng
- Tắt điểm cuối cũ sau khi di chuyển các ứng dụng khách của bạn
Di chuyển sang quy trình mã xác thực máy chủ
Nếu máy chủ của bạn cần truy cập vào 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 quy trình mã xác thực máy chủ.
Để di 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 Android
- Xoá quyền
GET_ACCOUNTS
(Danh bạ) nếu bạn yêu cầu - Chuyển đổi mã bất kỳ bằng
GoogleAuthUtil
,Plus.API
AccountPicker.newChooseAccountIntent()
hoặcAccountManager.newChooseAccountIntent()
đếnAuth.GOOGLE_SIGN_IN_API
bằng Cấu hìnhGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Phía máy chủ
- Tạo điểm cuối mới cho quy trình mã xác thực máy chủ
- Tắt điểm cuối cũ sau khi di chuyển các ứng dụng khách của bạn
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. 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 mã nhận dạng GoogleAuthUtil
Nếu dùng GoogleAuthUtil
để nhận mã thông báo nhận dạng, bạn nên chuyển sang phiên bản mới
Quy trình mã thông báo mã nhận dạng API đăng nhập.
Ví dụ: nếu mã Android của bạn giống như ví dụ sau, bạn nên migrate:
Trong ví dụ này, các yêu cầu mã thông báo giá trị nhận dạng sử dụng audience:server:client_id
cùng với
client ID cho máy chủ web của bạn dưới dạng tham số 'phạm vi' cho
Cuộc gọi GoogleAuthUtil.getToken
(audience:server:client_id:9414861317621.apps.googleusercontent.com
).
Quy trình mã thông báo mã nhận dạng 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 nhấn đơn giản hoá
- Máy chủ của bạn có thể nhận thông tin hồ sơ người dùng mà không cần thêm lệnh gọi mạng
Để di chuyển sang quy trình mã thông báo giá trị nhận dạng, hãy thực hiện các thay đổi sau:
Phía máy khách Android
- Xoá quyền
GET_ACCOUNTS
(Danh bạ) nếu bạn yêu cầu - Chuyển đổi mã bất kỳ bằng
GoogleAuthUtil
,Plus.API
AccountPicker.newChooseAccountIntent()
hoặcAccountManager.newChooseAccountIntent()
đếnAuth.GOOGLE_SIGN_IN_API
bằng Cấu hìnhGoogleSignInOptions.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 thủ với OpenID Connect
không giống như GoogleAuthUtil.getToken
(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
, có https
giản đồ.
Trong quá trình di chuyển, máy chủ của bạn cần xác minh mã thông báo mã nhận dạng từ cả cá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 ứng dụng bạn sử dụng (nếu bạn sử dụng):
- Java (Thư viện ứng dụng API của Google): nâng cấp lên phiên bản 1.21.0 trở lên
- PHP (Google APIs Client Libraries): nếu bạn sử dụng phiên bản v1, hãy nâng cấp lên 1.1.6 trở lên; nếu bạn sử dụng v2, 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 trở lên
- Python hoặc các cách triển khai của riêng bạn: chấp nhận cả hai nhà phát hành sau:
https://accounts.google.com
vàaccounts.google.com
Di chuyển từ quy trình mã xác thực máy chủ GoogleAuthUtil
Nếu sử dụng GoogleAuthUtil
để nhận mã xác thực máy chủ thì bạn nên chuyển sang
quy trình mã uỷ quyền API Đăng nhập mới.
Ví dụ: nếu mã Android của bạn giống như ví dụ sau, bạn nên migrate:
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 dưới dạng tham số scope
cho
Cuộc gọi GoogleAuthUtil.getToken
(oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
Quy trình mã xác thực mới của API Đăng nhập có các lợi ích sau:
- Trải nghiệm đăng nhập bằng một lần nhấn đơn giản hoá
- 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 giá trị 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ã uỷ quyền mới, hãy thực hiện các thay đổi sau:
Phía máy khách Android
- Xoá quyền
GET_ACCOUNTS
(Danh bạ) nếu bạn yêu cầu - Chuyển đổi mã bất kỳ bằng
GoogleAuthUtil
,Plus.API
AccountPicker.newChooseAccountIntent()
hoặcAccountManager.newChooseAccountIntent()
đếnAuth.GOOGLE_SIGN_IN_API
bằng Cấu hìnhGoogleSignInOptions.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
GoogleAuthorizationCodeTokenRequest
để bạn có thể nhận mã thông báo giá trị nhận dạng
có email, mã nhận dạng người dùng và thông tin hồ sơ của người dùng mà không cần
cuộc gọi mạng. Điểm cuối này hoàn toàn tương thích ngược và có đoạn 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ả thiết bị Android cũ và mới
khách hàng.
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); ...