Kimlik Belirteçlerini Doğrulayın

Firebase istemci uygulamanız özel bir arka uç sunucusuyla iletişim kuruyorsa bu 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 oturum açma işleminin ardından kullanıcının kimlik belirtecini HTTPS kullanarak sunucunuza gönderin. Ardından sunucuda kimlik belirtecinin bütünlüğünü ve orijinalliğini doğrulayın ve uid ondan alın. Sunucunuzda şu anda oturum açmış olan kullanıcıyı güvenli bir şekilde tanımlamak için bu şekilde iletilen uid kullanabilirsiniz.

Sen başlamadan önce

Kimlik belirteçlerini Firebase Admin SDK ile doğrulamak için bir hizmet hesabınızın olması gerekir. Yönetici SDK'sının bir hizmet hesabıyla nasıl başlatılacağı hakkında daha fazla bilgi için Yönetici SDK'sı kurulum talimatlarını izleyin.

İstemcilerden kimlik belirteçlerini alın

Bir kullanıcı veya cihaz başarıyla oturum açtığında Firebase, kendisini benzersiz şekilde tanımlayan ve onlara Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama gibi çeşitli kaynaklara erişim izni veren karşılık gelen bir kimlik belirteci oluşturur. Özel arka uç sunucunuzdaki kullanıcıyı veya cihazı 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 oturum açmış kullanıcıdan kimlik belirtecini alın:

iOS+

Amaç-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
          // ...
}];
Süratli
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.is_valid()) {
  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 belirtecine sahip olduğunuzda, 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 Yönetici SDK'sında kimlik belirteçlerinin doğrulanması ve kodunun çözülmesi için yerleşik bir yöntem bulunur. Sağlanan kimlik belirtecinin biçimi doğruysa, süresi dolmamışsa ve düzgün şekilde imzalanmışsa yöntem, kodu çözülmüş kimlik belirtecini döndürür. Kullanıcının veya cihazın kullanıcı uid kodu çözülmüş jetondan alabilirsiniz.

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
getAuth()
  .verifyIdToken(idToken)
  .then((decodedToken) => {
    const uid = decodedToken.uid;
    // ...
  })
  .catch((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']

Gitmek

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ı bir proje kimliği gerektirir. Firebase Admin SDK, aşağıdaki yöntemlerden birini kullanarak bir proje kimliği almaya çalışır:

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

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

Arka ucunuz Firebase Yönetici SDK'sı tarafından desteklenmeyen bir dildeyse kimlik jetonlarını yine de doğrulayabilirsiniz. Öncelikle diliniz için üçüncü taraf bir JWT kitaplığı 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 uygun olduğunu doğrulayın:

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

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

Kimlik Belirteci Yükü Talepleri
exp son kullanma süresi Gelecekte olmalı. UNIX döneminden bu yana geçen süre saniye cinsinden ölçülür.
iat Yayınlandığı tarihte Geçmişte olmalı. UNIX döneminden bu yana geçen süre saniye cinsinden ölçülür.
aud Kitle Firebase projenizin benzersiz tanımlayıcısı olan ve söz konusu projenin konsolunun URL'sinde bulunabilen Firebase proje kimliğiniz olmalıdır.
iss İhraççı "https://securetoken.google.com/<projectId>" olmalıdır; burada <projectId> yukarıdaki aud için kullanılan proje kimliğinin aynısıdır.
sub Ders Boş olmayan bir dize olmalı ve kullanıcının veya cihazın uid olmalıdır.
auth_time Kimlik doğrulama süresi Geçmişte olmalı. Kullanıcının kimliğini doğruladığı zaman.

Son olarak, kimlik belirtecinin, belirtecin kid talebine karşılık gelen özel anahtar tarafından imzalandığından emin olun. https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com adresinden ortak anahtarı alın ve imzayı doğrulamak için bir JWT kitaplığı kullanın. Ortak anahtarların ne zaman yenileneceğini öğrenmek için bu uç noktadan gelen yanıtın Cache-Control başlığındaki max-age değerini kullanın.

Yukarıdaki doğrulamaların tümü başarılı olursa, kimlik belirtecinin konusunu ( sub ) ilgili kullanıcı veya cihazın kullanıcı uid olarak kullanabilirsiniz.