Kimlik Jetonlarını Doğrula

Firebase istemci uygulamanız özel bir arka uç sunucusuyla iletişim kurarsa o sunucuda oturum açmış kullanıcıyı tanımlaması gerekebilir. Bunu yapmak için: güvenli bir şekilde, başarılı bir oturum açma işleminden sonra kullanıcının kimlik jetonunu sunucunuza gönderin HTTPS kullanıyor. Ardından sunucuda, Kimlik jetonu oluşturup bu jetondan uid öğesini alın. uid öğesini şurada kullanabilirsiniz: bu şekilde, sunucunuzda oturum açmış kullanıcıyı güvenli bir şekilde tanımlayabilirsiniz.

Başlamadan önce

Kimlik jetonlarını Firebase Admin SDK ile doğrulamak için bir hizmetiniz olması gerekir hesap. Yönetici SDK'sı kurulum talimatlarını uygulayın: Admin SDK'yı bir hizmet hesabıyla başlatma hakkında daha fazla bilgi.

İstemcilerdeki kimlik jetonlarını alma

Bir kullanıcı veya cihaz başarıyla oturum açtığında Firebase, buna karşılık gelen bir Bunları benzersiz şekilde tanımlayan ve birçok kullanıcıya erişim izni veren kimlik jetonu kaynaklar (Firebase Realtime Database ve Cloud Storage gibi). Şunları yapabilirsiniz: Özel arka ucunuzda kullanıcıyı veya cihazı tanımlamak için bu kimlik jetonunu yeniden kullanın sunucu. Kimlik jetonunu istemciden almak için kullanıcının imzalı olduğundan emin olun oturum açın ve oturum açmış kullanıcıdan kimlik jetonunu alın:

iOS ve üzeri

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
          // ...
}];
Swift
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();
            }
        }
    });

Unity

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

Web

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

Kimlik jetonunuz olduğunda bu JWT'yi arka ucunuza gönderebilir ve doğrulama işlemini Firebase Admin SDK veya üçüncü taraf JWT sunucunuz Firebase'in yazmadığı bir dilde yazılmışsa kitaplığınız yerel olarak desteklemesini sağlar.

Firebase Admin SDK'yı kullanarak kimlik jetonlarını doğrulama

Firebase Admin SDK'da, kimliği doğrulamak ve kodunu çözmek için yerleşik bir yöntem bulunur jeton. Sağlanan kimlik jetonunun biçimi doğruysa, süresi dolmamışsa ve düzgün şekilde imzalandığında yöntem, kodu çözülmüş kimlik jetonunu döndürür. Web sitemiz g.co/newsinitiative/labs üzerinden Kodu çözülmüş jetondan kullanıcı veya cihazın uid kadarı.

İlk kullanıma hazırlamak için Admin SDK'sı kurulum talimatlarını uygulayın Yönetici SDK'si oluşturun. Ardından verifyIdToken() yöntemini kullanın şu adımları izleyin:

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();

Python

# id_token comes from the client app (shown above)

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

Go

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 jetonu doğrulama için proje kimliği gerekir. Firebase Admin SDK denemeleri proje kimliğini almak için aşağıdaki yöntemlerden birini kullanın:

  • 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 hizmet hesabı JSON nesnesinin project_id alanı.
  • GOOGLE_CLOUD_PROJECT ortam değişkeni ayarlanırsa SDK, değeri olarak kullanılır. Bu ortam değişkeni şunun için kullanılabilir: App Engine ve Compute Engine.

Kimlik jetonlarını üçüncü taraf JWT kitaplığı kullanarak doğrulama

Arka ucunuz Firebase Yöneticisi tarafından desteklenmeyen bir dildeyse SDK, kimlik jetonlarını doğrulamaya devam edebilirsiniz. İlk olarak, Kendi dilinize uygun bir üçüncü taraf JWT kitaplığı bulun. Ardından, Kimlik jetonunun başlığını, yükünü ve imzasını doğrulayın.

Kimlik jetonunun başlığının aşağıdaki kısıtlamalara uygun olduğunu doğrulayın:

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

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

Kimlik Jetonu Yükü Talepleri
exp Geçerlilik süresi Gelecekte olmalıdır. Süre, UNIX'ten itibaren saniye cinsinden ölçülür epoch'ta yer alır.
iat Yayınlanma zamanı Geçmiş bir tarih olmalıdır. Süre, UNIX'ten itibaren saniye cinsinden ölçülür epoch'ta yer alır.
aud Kitle Firebase proje kimliğiniz ve Firebase'inizin benzersiz tanımlayıcısı olmalıdır projenin konsolunun URL'sinde bulunabilir.
iss Düzenleyen "https://securetoken.google.com/<projectId>" olmalıdır, Burada <projectId>, kullanılan proje kimliği ile aynıdır. aud yukarıda.
sub Konu Boş olmayan bir dize olmalı ve kullanıcıya ait uid olanak tanır.
auth_time Kimlik doğrulama zamanı Geçmiş bir tarih olmalıdır. Kullanıcının kimlik doğrulamasının yapıldığı zaman.

Son olarak, kimlik jetonunun ilgili özel anahtar tarafından imzalandığından emin olun jetonun kid isteğine ekleyin. Şuradan ortak anahtarı al: https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com ve imzayı doğrulamak için bir JWT kitaplığı kullanın. Şu öğede max-age değerini kullanın: ne zaman yapılacağını bilmek için söz konusu uç noktadan gelen yanıtın Cache-Control üstbilgisini ortak anahtarları yenileyin.

Yukarıdaki doğrulamaların tümü başarılıysa konu (sub) öğesini kullanabilirsiniz. için kimlik jetonunun uid öğesi, ilgili kullanıcı veya cihaz için geçerlidir.