Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Verifikasi Token ID

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Jika aplikasi klien Firebase Anda berkomunikasi dengan server backend kustom, Anda mungkin perlu mengidentifikasi pengguna yang saat ini masuk ke server tersebut. Untuk melakukannya dengan aman, setelah berhasil masuk, kirim token ID pengguna ke server Anda menggunakan HTTPS. Kemudian, di server, verifikasi integritas dan keaslian token ID dan ambil uid darinya. Anda dapat menggunakan uid yang dikirimkan dengan cara ini untuk mengidentifikasi pengguna yang saat ini masuk di server Anda dengan aman.

Sebelum kamu memulai

Untuk memverifikasi token ID dengan Firebase Admin SDK, Anda harus memiliki akun layanan. Ikuti petunjuk penyiapan Admin SDK untuk informasi selengkapnya tentang cara menginisialisasi Admin SDK dengan akun layanan.

Ambil token ID pada klien

Saat pengguna atau perangkat berhasil masuk, Firebase membuat token ID terkait yang mengidentifikasi mereka secara unik dan memberi mereka akses ke beberapa sumber daya, seperti Firebase Realtime Database dan Cloud Storage. Anda dapat menggunakan kembali token ID tersebut untuk mengidentifikasi pengguna atau perangkat di server backend kustom Anda. Untuk mengambil token ID dari klien, pastikan pengguna masuk, lalu dapatkan token ID dari pengguna yang masuk:

iOS+

Objective-C
FIRUser *currentUser = [FIRAuth auth].currentUser;
[currentUser getIDTokenForcingRefresh:YES
                           completion:^(NSString *_Nullable idToken,
                                        NSError *_Nullable error) {
          if (error) {
            // Handle error
            return;
          }

          // Send token to your backend via HTTPS
          // ...
}];
Cepat
let currentUser = FIRAuth.auth()?.currentUser
currentUser?.getIDTokenForcingRefresh(true) { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}

Android

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });

Persatuan

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync(true).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("TokenAsync was canceled.");
   return;
  }

  if (task.IsFaulted) {
    Debug.LogError("TokenAsync encountered an error: " + task.Exception);
    return;
  }

  string idToken = task.Result;

  // Send token to your backend via HTTPS
  // ...
});

C++

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  firebase::Future<std::string> idToken = user->GetToken(true);

  // Send token to your backend via HTTPS
  // ...
}

Web

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});

Setelah memiliki token ID, Anda dapat mengirim JWT tersebut ke backend dan memvalidasinya menggunakan Firebase Admin SDK, atau menggunakan library JWT pihak ketiga jika server Anda ditulis dalam bahasa yang tidak didukung oleh Firebase.

Verifikasi token ID menggunakan Firebase Admin SDK

Firebase Admin SDK memiliki metode bawaan untuk memverifikasi dan mendekode token ID. Jika token ID yang diberikan memiliki format yang benar, tidak kedaluwarsa, dan ditandatangani dengan benar, metode akan mengembalikan token ID yang didekodekan. Anda dapat mengambil uid pengguna atau perangkat dari token yang didekodekan.

Ikuti petunjuk penyiapan Admin SDK untuk menginisialisasi Admin SDK dengan akun layanan. Kemudian, gunakan metode verifikasiIdToken verifyIdToken() untuk memverifikasi token ID:

Node.js

// idToken comes from the client app
getAuth()
  .verifyIdToken(idToken)
  .then((decodedToken) => {
    const uid = decodedToken.uid;
    // ...
  })
  .catch((error) => {
    // Handle error
  });

Jawa

// idToken comes from the client app (shown above)
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();

Python

# id_token comes from the client app (shown above)

decoded_token = auth.verify_id_token(id_token)
uid = decoded_token['uid']

Pergi

client, err := app.Auth(ctx)
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

token, err := client.VerifyIDToken(ctx, idToken)
if err != nil {
	log.Fatalf("error verifying ID token: %v\n", err)
}

log.Printf("Verified ID token: %v\n", token)

C#

FirebaseToken decodedToken = await FirebaseAuth.DefaultInstance
    .VerifyIdTokenAsync(idToken);
string uid = decodedToken.Uid;

Verifikasi token ID memerlukan ID proyek. Firebase Admin SDK mencoba mendapatkan ID proyek melalui salah satu metode berikut:

  • Jika SDK diinisialisasi dengan opsi aplikasi projectId eksplisit, SDK menggunakan nilai opsi tersebut.
  • Jika SDK diinisialisasi dengan kredensial akun layanan, SDK menggunakan bidang project_id dari objek JSON akun layanan.
  • Jika variabel lingkungan GOOGLE_CLOUD_PROJECT disetel, SDK menggunakan nilainya sebagai ID proyek. Variabel lingkungan ini tersedia untuk kode yang berjalan di infrastruktur Google seperti App Engine dan Compute Engine.

Verifikasi token ID menggunakan perpustakaan JWT pihak ketiga

Jika backend Anda menggunakan bahasa yang tidak didukung oleh Firebase Admin SDK, Anda masih dapat memverifikasi token ID. Pertama, temukan perpustakaan JWT pihak ketiga untuk bahasa Anda . Kemudian, verifikasi header, payload, dan tanda tangan token ID.

Pastikan header token ID sesuai dengan batasan berikut:

Klaim Header Token ID
alg algoritma "RS256"
kid ID kunci Harus sesuai dengan salah satu kunci publik yang tercantum di https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

Pastikan payload token ID sesuai dengan batasan berikut:

Klaim Payload Token ID
exp waktu kedaluwarsa Harus di masa depan. Waktu diukur dalam detik sejak zaman UNIX.
iat Diterbitkan-pada waktu Harus di masa lalu. Waktu diukur dalam detik sejak zaman UNIX.
aud Hadirin Harus berupa ID proyek Firebase Anda, pengidentifikasi unik untuk proyek Firebase Anda, yang dapat ditemukan di URL konsol proyek tersebut.
iss Penerbit Harus berupa "https://securetoken.google.com/<projectId>" , dengan <projectId> adalah ID proyek yang sama yang digunakan untuk aud di atas.
sub Subjek Harus berupa string yang tidak kosong dan harus berupa uid pengguna atau perangkat.
auth_time Waktu otentikasi Harus di masa lalu. Waktu ketika pengguna mengautentikasi.

Terakhir, pastikan token ID ditandatangani oleh kunci pribadi yang sesuai dengan klaim kid token. Ambil kunci publik dari https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com dan gunakan perpustakaan JWT untuk memverifikasi tanda tangan. Gunakan nilai max-age di header Cache-Control dari respons dari titik akhir itu untuk mengetahui kapan harus me-refresh kunci publik.

Jika semua verifikasi di atas berhasil, Anda dapat menggunakan subjek ( sub ) token ID sebagai uid dari pengguna atau perangkat yang sesuai.