Tổng quan
Vào ngày 16 tháng 2 năm 2022, chúng tôi đã thông báo kế hoạch tăng mức độ an toàn cho các hoạt động tương tác qua OAuth của Google bằng cách sử dụng các quy trình OAuth bảo mật hơn. Hướng dẫn này giúp bạn nắm được các thay đổi cần thiết và các bước để di chuyển thành công từ luồng địa chỉ IP lặp lại sang các giải pháp thay thế được hỗ trợ.
Nỗ lực này là một biện pháp bảo vệ chống lại các cuộc tấn công lừa đảo và mạo danh ứng dụng trong quá trình tương tác với điểm cuối uỷ quyền OAuth 2.0 của Google.
Luồng Địa chỉ IP Loopback là gì?
Luồng địa chỉ IP vòng lặp hỗ trợ việc sử dụng địa chỉ IP lặp lại hoặclocalhost
làm thành phần máy chủ lưu trữ của URI chuyển hướng, nơi thông tin đăng nhập được gửi đến sau khi người dùng phê duyệt yêu cầu đồng ý OAuth. Quy trình này dễ bị người đàn ông ở giữa tấn công, trong đó một ứng dụng bất chính (truy cập cùng một giao diện vòng lặp ngược) trên một số hệ điều hành, có thể chặn phản hồi từ máy chủ uỷ quyền đến URI chuyển hướng nhất định và giành quyền truy cập vào mã uỷ quyền.
Quy trình địa chỉ IP vòng lặp sẽ ngừng hoạt động cho các loại ứng dụng OAuth gốc của iOS, Android và Chrome. Tuy nhiên, chúng tôi sẽ tiếp tục hỗ trợ quy trình này trên các ứng dụng dành cho máy tính.
Ngày tuân thủ chính
- Ngày 14 tháng 3 năm 2022 – các ứng dụng OAuth mới sẽ bị chặn sử dụng luồng địa chỉ IP của Loopback
- Ngày 1 tháng 8 năm 2022 – một thông báo cảnh báo dành cho người dùng có thể xuất hiện đối với các yêu cầu OAuth không tuân thủ
- Ngày 31 tháng 8 năm 2022 – Quy trình về địa chỉ IP của Loopback sẽ bị chặn đối với các ứng dụng OAuth gốc của Android, ứng dụng Chrome và iOS được tạo trước ngày 14 tháng 3 năm 2022
- Ngày 21 tháng 10 năm 2022 – tất cả ứng dụng hiện tại đều bị chặn (kể cả khách hàng được miễn trừ)
Thông báo lỗi dành cho người dùng sẽ xuất hiện đối với các yêu cầu không tuân thủ. Thông báo này sẽ truyền đạt cho người dùng rằng ứng dụng bị chặn trong khi hiển thị email hỗ trợ mà bạn đã đăng ký trong màn hình yêu cầu sự đồng ý của OAuth trong Bảng điều khiển API của Google.
- Xác định xem bạn có bị ảnh hưởng hay không.
- Hãy chuyển sang một giải pháp thay thế được hỗ trợ nếu bạn bị ảnh hưởng.
Xác định xem bạn có bị ảnh hưởng không
Xem lại loại mã ứng dụng khách OAuth của bạn
Chuyển đến Credentials page / Google API Console và xem loại mã ứng dụng khách OAuth trong phần Mã ứng dụng khách OAuth 2.0. Đó sẽ là một trong các dạng sau: Ứng dụng web, Android, iOS, Nền tảng Windows (UWP), Ứng dụng Chrome, TV và thiết bị đầu vào bị giới hạn, Ứng dụng cho máy tính.
Tiếp tục thực hiện bước tiếp theo nếu loại ứng dụng của bạn là Android, ứng dụng Chrome hoặc iOS và bạn đang sử dụng luồng địa chỉ IP lặp lại.
Nếu đang sử dụng luồng địa chỉ IP lặp lại trên ứng dụng OAuth của ứng dụng Máy tính, bạn không cần làm gì liên quan đến việc ngừng sử dụng này vì việc sử dụng với loại ứng dụng OAuth đó sẽ tiếp tục được hỗ trợ.
Cách xác định xem ứng dụng của bạn có đang dùng luồng địa chỉ IP lặp lại hay không
Kiểm tra mã ứng dụng của bạn hoặc lệnh gọi qua mạng đi (trong trường hợp ứng dụng của bạn đang sử dụng thư viện OAuth) để xác định xem yêu cầu uỷ quyền OAuth của Google mà ứng dụng của bạn đang thực hiện có sử dụng giá trị URI chuyển hướng vòng lặp hay không.
Kiểm tra mã xử lý ứng dụng của bạn
redirect_uri
có bất kỳ giá trị nào sau đây hay không:
-
redirect_uri=http://127.0.0.1:<port>
, ví dụ:redirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
, ví dụ:redirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
, ví dụ:redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Kiểm tra lệnh gọi mạng đi
- Ứng dụng web – kiểm tra hoạt động mạng trên Chrome
- Android – kiểm tra lưu lượng truy cập mạng bằng Công cụ kiểm tra mạng
-
Ứng dụng Chrome
- Chuyển đến trang Tiện ích của Chrome
- Chọn hộp đánh dấu Chế độ dành cho nhà phát triển ở góc trên cùng bên phải của trang tiện ích
- Chọn tiện ích bạn muốn giám sát
- Nhấp vào đường liên kết trang nền trong phần Kiểm tra khung hiển thị của trang tiện ích
- Cửa sổ bật lên Công cụ dành cho nhà phát triển sẽ mở ra để bạn có thể theo dõi lưu lượng truy cập mạng trong thẻ Mạng
- iOS – Phân tích lưu lượng truy cập HTTP bằng Công cụ
- Universal Windows Platform (UWP) – Kiểm tra lưu lượng truy cập mạng trong Visual Studio
- Ứng dụng cho máy tính – sử dụng công cụ chụp mạng có sẵn cho hệ điều hành mà ứng dụng đó được phát triển
redirect_uri
có bất kỳ giá trị nào sau đây hay không:-
redirect_uri=http://127.0.0.1:<port>
, ví dụ:redirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
, ví dụ:redirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
, ví dụ:redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Chuyển sang một giải pháp thay thế được hỗ trợ
Ứng dụng trên thiết bị di động (Android / iOS)
Nếu xác định rằng ứng dụng của mình đang dùng luồng địa chỉ IP lặp lại với loại ứng dụng OAuth dành cho Android hoặc iOS, thì bạn nên chuyển sang sử dụng SDK dành cho thiết bị di động Đăng nhập bằng Google của chúng tôi (Android, iOS).
SDK giúp bạn dễ dàng truy cập vào các API của Google và xử lý mọi lệnh gọi đến điểm cuối uỷ quyền OAuth 2.0 của Google.
Các đường liên kết đến tài liệu dưới đây cung cấp thông tin về cách sử dụng SDK đăng nhập bằng Google để truy cập vào các API của Google mà không cần sử dụng URI chuyển hướng địa chỉ IP lặp lại.
Truy cập API của Google trên Android
Truy cập phía máy chủ (ngoại tuyến)
Ví dụ bên dưới cho biết cách truy cập vào các API của Google ở phía máy chủ trên Android.Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { GoogleSignInAccount account = task.getResult(ApiException.class); // request a one-time authorization code that your server exchanges for an // access token and sometimes refresh token String authCode = account.getServerAuthCode(); // Show signed-in UI updateUI(account); // TODO(developer): send code to server and exchange for access/refresh/ID tokens } catch (ApiException e) { Log.w(TAG, "Sign-in failed", e); updateUI(null); }
Xem lại hướng dẫn truy cập phía máy chủ để biết cách truy cập vào các API của Google từ phía máy chủ.
Truy cập API của Google trong ứng dụng iOS
Quyền truy cập phía máy khách
Ví dụ bên dưới cho biết cách truy cập vào các API của Google ở phía máy khách trên iOS.
user.authentication.do { authentication, error in guard error == nil else { return } guard let authentication = authentication else { return } // Get the access token to attach it to a REST or gRPC request. let accessToken = authentication.accessToken // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for // use with GTMAppAuth and the Google APIs client library. let authorizer = authentication.fetcherAuthorizer() }
Sử dụng mã truy cập để gọi API, bằng cách đưa mã truy cập vào tiêu đề của yêu cầu REST hoặc gRPC (Authorization: Bearer ACCESS_TOKEN
) hoặc sử dụng trình uỷ quyền cho trình tìm nạp (GTMFetcherAuthorizationProtocol
) với
thư viện ứng dụng API của Google cho Objective-C cho REST.
Xem lại hướng dẫn truy cập phía máy khách để biết cách truy cập vào các API của Google ở phía máy khách. về cách truy cập API Google ở phía máy khách.
Quyền truy cập phía máy chủ (ngoại tuyến)
Ví dụ bên dưới cho biết cách truy cập API của Google ở phía máy chủ để hỗ trợ ứng dụng iOS.GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in guard error == nil else { return } guard let user = user else { return } // request a one-time authorization code that your server exchanges for // an access token and refresh token let authCode = user.serverAuthCode }
Xem hướng dẫn truy cập phía máy chủ để biết cách truy cập vào các API của Google từ phía máy chủ.
Ứng dụng ứng dụng Chrome
Nếu xác định rằng ứng dụng của mình đang sử dụng luồng địa chỉ IP lặp lại trên ứng dụng ứng dụng Chrome, bạn nên chuyển sang sử dụng API Chrome Identity.
Ví dụ bên dưới cho thấy cách nhận toàn bộ thông tin liên hệ của người dùng mà không cần sử dụng URI chuyển hướng địa chỉ IP lặp lại.
window.onload = function() { document.querySelector('button').addEventListener('click', function() { // retrieve access token chrome.identity.getAuthToken({interactive: true}, function(token) { // .......... // the example below shows how to use a retrieved access token with an appropriate scope // to call the Google People API contactGroups.get endpoint fetch( 'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY', init) .then((response) => response.json()) .then(function(data) { console.log(data) }); }); }); };
Xem lại hướng dẫn về API Chrome Identity để biết thêm thông tin về cách truy cập vào tính năng xác thực người dùng và gọi các điểm cuối của Google bằng API Chrome Identity.