Google, Siyah topluluklar için ırksal eşitliği ilerletmeye kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Kimlik Jetonlarını Doğrulayın

Firebase istemci uygulamanız özel bir arka uç sunucusuyla iletişim kuruyorsa, o sunucuda şu anda oturum açmış olan kullanıcıyı tanımlamanız gerekebilir. Bunu güvenli bir şekilde yapmak için, başarılı bir şekilde oturum açtıktan sonra HTTPS kullanarak kullanıcının kimlik jetonunu sunucunuza gönderin. Ardından, sunucuda, kimlik belirtecinin bütünlüğünü ve gerçekliğini doğrulayın ve ondan uid değerini alın. Sunucunuzda oturum uid olan uid güvenli bir şekilde tanımlamak için bu şekilde iletilen uid kimliğini kullanabilirsiniz.

Sen başlamadan önce

Firebase Yönetici SDK'sı ile kimlik belirteçlerini doğrulamak için bir hizmet hesabınızın olması gerekir. Yönetici SDK'sını bir hizmet hesabıyla başlatma hakkında daha fazla bilgi için Yönetici SDK'sı kurulum talimatlarını uygulayın.

İstemcilerdeki kimlik belirteçlerini alma

Bir kullanıcı veya cihaz başarıyla oturum açtığında Firebase, benzersiz bir şekilde tanımlayan ve Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama gibi çeşitli kaynaklara erişmesine izin veren karşılık gelen bir kimlik jetonu oluşturur. Özel arka uç sunucunuzdaki kullanıcıyı veya aygıtı tanımlamak için bu kimlik belirtecini yeniden kullanabilirsiniz. Kimlik belirtecini istemciden almak için kullanıcının oturum açtığından emin olun ve ardından kimlik belirtecini oturum açan kullanıcıdan alın:

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
          // ...
}];
 
hızlı
 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();
            }
        }
    });
 

Birlik

 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
  // ...
}
 

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

Bir kimlik belirteciniz olduğunda, bu JWT'yi arka ucunuza gönderebilir ve Firebase Yönetici SDK'sını kullanarak veya sunucunuz Firebase'in yerel olarak desteklemediği bir dilde yazılmışsa üçüncü taraf JWT kitaplığını kullanarak doğrulayabilirsiniz.

Firebase Yönetici SDK'sını kullanarak kimlik belirteçlerini doğrulama

Firebase Admin SDK'sında kimlik belirteçlerini doğrulama ve kod çözme için yerleşik bir yöntem vardır. Sağlanan kimlik belirtecinin biçimi doğru ise, süresi dolmamışsa ve düzgün imzalanmışsa, yöntem kodu çözülmüş kimlik belirtecini döndürür. Sen yakalayabilir uid deşifre simge gelen kullanıcı veya cihaz.

Yönetici SDK'sını bir hizmet hesabıyla başlatmak için Yönetici SDK'sı kurulum talimatlarını izleyin. Ardından, bir kimlik belirtecini doğrulamak için verifyIdToken() yöntemini kullanın:

node.js

 // idToken comes from the client app
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    let uid = decodedToken.uid;
    // ...
  }).catch(function(error) {
    // Handle error
  });
 

Java

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

piton

 # id_token comes from the client app (shown above)

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

Git

 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;
 

Kimlik belirteci doğrulaması için bir proje kimliği gerekir. Firebase Yönetici SDK'sı, aşağıdaki yöntemlerden biriyle proje kimliği almaya çalışır:

  • SDK, açık bir projectId uygulama seçeneğiyle başlatılmışsa, SDK bu seçeneğin değerini kullanır.
  • SDK, hizmet hesabı kimlik bilgileriyle başlatılmışsa, SDK hizmet hesabı JSON nesnesinin project_id alanını kullanır.
  • GOOGLE_CLOUD_PROJECT ortam değişkeni ayarlanmışsa, SDK değerini proje kimliği olarak kullanır. Bu ortam değişkeni, Google App Engine ve Google Compute Engine gibi Google altyapısında çalışan kodlar için kullanılabilir.

Üçüncü taraf JWT kitaplığı kullanarak kimlik belirteçlerini doğrulama

Arka uçunuz Firebase Yönetici SDK'sı tarafından desteklenmeyen bir dildeyse, yine de kimlik belirteçlerini doğrulayabilirsiniz. İlk olarak, diliniz için üçüncü taraf bir JWT kütüphanesi bulun . Ardından, kimlik belirtecinin başlığını, yükünü ve imzasını doğrulayın.

Kimlik belirtecinin başlığının aşağıdaki kısıtlamalara uyduğunu doğrulayın:

Kimlik Jetonu Başlık Talepleri
alg Algoritma "RS256"
kid Anahtar Kimliği https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com listelenen genel anahtarlardan birine karşılık https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

Kimlik belirtecinin faydalı yükünün aşağıdaki kısıtlamalara uygun olduğunu doğrulayın:

Kimlik Jetonu Yükü İddiaları
exp Son kullanma tarihi Gelecekte olmalı. UNIX döneminden beri geçen süre saniye cinsinden ölçülür.
iat Verilen zamanda Geçmişte olmalı. UNIX döneminden beri geçen süre saniye cinsinden ölçülür.
aud seyirci Firebase projenizin URL'sinde bulunan Firebase projenizin benzersiz tanımlayıcısı olan Firebase proje kimliğiniz olmalıdır.
iss İhraççı Olmalı "https://securetoken.google.com/<projectId>" , nerede <projectId> için kullanılan aynı proje kimliğidir aud yukarıda.
sub konu Boş olmayan bir dize olmalı ve kullanıcının veya cihazın kullanıcı uid olmalıdır.
auth_time Kimlik doğrulama zamanı Geçmişte olmalı. Kullanıcının kimliğinin doğrulandığı zaman.

Son olarak, kimlik belirteci jetonun tekabül özel anahtar tarafından imzalanan sağlamak kid istem. https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com genel anahtarı alın ve imzayı doğrulamak için bir JWT kitaplığı kullanın. Ortak anahtarların ne zaman yenileneceğini bilmek için o son noktadan alınan yanıtın Cache-Control başlığında max-age değerini kullanın.

Her şeyden önce doğrulamaları başarılı olursa, konuyu (kullanabilirsiniz sub olarak belirteci ID'nin) uid gelen kullanıcı veya cihaz.