Ứng dụng Đăng nhập bằng một lần chạm sẽ truy xuất mã thông báo nhận dạng Google khi người dùng chọn một Tài khoản Google. Mã nhận dạng là một câu khẳng định đã ký về danh tính của người dùng, đồng thời chứa thông tin cơ bản trong hồ sơ của người dùng, có thể bao gồm cả địa chỉ email đã được Google xác minh.
Khi có mã nhận dạng, bạn có thể dùng mã này để xác thực một cách an toàn với phần phụ trợ của ứng dụng hoặc tự động đăng ký cho người dùng một tài khoản mới mà không cần xác minh địa chỉ email của người dùng.
Để đăng nhập hoặc đăng ký người dùng bằng mã nhận dạng, hãy gửi mã này đến phần phụ trợ của ứng dụng. Trên phần phụ trợ, hãy xác minh mã thông báo bằng cách sử dụng thư viện ứng dụng API của Google hoặc thư viện JWT đa năng. Nếu người dùng chưa đăng nhập vào ứng dụng của bạn bằng Tài khoản Google này, hãy tạo một tài khoản mới.
Nếu bạn chọn sử dụng một số chỉ dùng một lần để tránh các cuộc tấn công phát lại, hãy dùng getNonce để gửi số đó cùng với mã nhận dạng người dùng đến máy chủ phụ trợ của bạn và kiểm tra giá trị dự kiến. Bạn nên cân nhắc việc sử dụng số chỉ dùng một lần để cải thiện sự an toàn và bảo mật cho người dùng.
Nhận mã thông báo nhận dạng từ đối tượng thông tin đăng nhập
Sau khi truy xuất thông tin đăng nhập của người dùng, hãy kiểm tra xem đối tượng thông tin đăng nhập có chứa mã nhận dạng hay không. Nếu có, hãy gửi mã này đến phần phụ trợ của bạn.
Java
public class YourActivity extends AppCompatActivity { // ... private static final int REQ_ONE_TAP = 2; // Can be any integer unique to the Activity. private boolean showOneTapUI = true; // ... @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQ_ONE_TAP: try { SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data); String idToken = credential.getGoogleIdToken(); if (idToken != null) { // Got an ID token from Google. Use it to authenticate // with your backend. Log.d(TAG, "Got ID token."); } } catch (ApiException e) { // ... } break; } } }
Kotlin
class YourActivity : AppCompatActivity() { // ... private val REQ_ONE_TAP = 2 // Can be any integer unique to the Activity private var showOneTapUI = true // ... override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode) { REQ_ONE_TAP -> { try { val credential = oneTapClient.getSignInCredentialFromIntent(data) val idToken = credential.googleIdToken when { idToken != null -> { // Got an ID token from Google. Use it to authenticate // with your backend. Log.d(TAG, "Got ID token.") } else -> { // Shouldn't happen. Log.d(TAG, "No ID token!") } } } catch (e: ApiException) { // ... } } } // ... }