Ứng dụng đăng nhập bằng một lần chạm truy xuất mã thông báo mã nhận dạng trên Google khi người dùng chọn một Tài khoản Google. Mã thông báo nhận dạng là một câu nhận định đã ký về danh tính của người dùng, đồng thời chứa thông tin hồ sơ cơ bản của người dùng, có thể bao gồm cả địa chỉ email đã được Google xác minh.
Khi có mã thông báo nhận dạng, bạn có thể sử dụng các 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ý tài khoản mới cho người dùng 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ã thông báo nhận dạng, hãy gửi mã thông báo đó đến phần phụ trợ của ứng dụng. Ở phần phụ trợ, hãy xác minh mã thông báo bằng thư viện ứng dụng API của Google hoặc thư viện JWT dùng cho nhiều mục đích. Nếu người dùng chưa từng đăng nhập vào ứng dụng 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 số chỉ dùng một lần để tránh các cuộc tấn công phát lại, hãy sử dụng getNonce để gửi số chỉ dùng một lần cùng với mã thông báo nhận dạng đến máy chủ phụ trợ và kiểm tra giá trị dự kiến. Bạn nên cân nhắ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.
Lấy mã thông báo nhận dạng từ đối tượng thông tin xác thực
Sau khi bạn truy xuất thông tin xác thực của người dùng, hãy kiểm tra xem đối tượng thông tin xác thực có chứa mã thông báo nhận dạng hay không. Nếu có, hãy gửi thông tin đó đến phần phụ trợ.
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) { // ... } } } // ... }