Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Kimlik Belirteçlerini 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 oturum açtıktan sonra, HTTPS kullanarak kullanıcının kimlik belirtecini sunucunuza gönderin. Sonra, sunucu üzerinde, jetonun kimlik bütünlüğünü ve özgünlüğünü doğrulamak ve almak uid ondan. Sen kullanabilirsiniz uid güvenli sunucu üzerinde kullanıcı imzalanan-şu anda belirlemek için bu şekilde aktarılmaz.

Sen başlamadan önce

Firebase Admin SDK ile kimlik belirteçlerini doğrulamak için bir hizmet hesabınızın olması gerekir. Takip Yönetici SDK kurulum talimatlarını bir hizmet hesabıyla Yönetici SDK'yı başlatmak konusunda daha fazla bilgi için bkz.

İstemcilerde kimlik belirteçlerini alın

Bir kullanıcı veya cihaz başarıyla oturum açtığında, Firebase onları benzersiz bir şekilde tanımlayan ve onlara Firebase Realtime Database ve Cloud Storage 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 != 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 Admin SDK'sını kullanarak veya sunucunuz Firebase'in yerel olarak desteklemediği bir dilde yazılmışsa üçüncü taraf bir JWT kitaplığı kullanarak doğrulayabilirsiniz.

Firebase Admin SDK'sını kullanarak kimlik belirteçlerini doğrulayın

Firebase Admin SDK, kimlik belirteçlerini doğrulamak ve kodunu çözmek için yerleşik bir yönteme sahiptir. Sağlanan kimlik belirteci doğru biçime sahipse, süresi dolmamışsa ve uygun şekilde imzalanmışsa, yöntem kodu çözülmüş kimlik belirtecini döndürür. Sen yakalayabilir uid deşifre simge gelen kullanıcı veya cihaz.

Takip Yönetici SDK kurulum talimatlarını bir hizmet hesabıyla Yönetici SDK'yı başlatmak için. Daha sonra, kullanma verifyIdToken() belirteci bir kimlik doğrulama yöntemini:

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 biri aracılığıyla bir proje kimliği almaya çalışır:

  • SDK açık olarak başlatıldı ise projectId uygulaması seçeneği SDK o seçeneğin değerini kullanır.
  • SDK hizmet hesabı kimlik bilgileriyle başlatıldı, SDK kullanan project_id hizmet hesabı JSON nesnesinin alanını.
  • Eğer GOOGLE_CLOUD_PROJECT ortam değişkeni ayarlanır, SDK proje kimliği olarak değerini 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ığı kullanarak kimlik belirteçlerini doğrulayın

Arka ucunuz Firebase Admin SDK tarafından desteklenmeyen bir dildeyse, yine de kimlik belirteçlerini doğrulayabilirsiniz. Birincisi, diliniz için bir üçüncü taraf JWT kütüphanesini bulmak . 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 Listelenen kamu tuşlarından birine uygun olmalıdır https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

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, o projenin konsolunun URL'sinde bulunabilen benzersiz tanımlayıcısı olan Firebase proje kimliğiniz olmalıdır.
iss ihraççı Olmalı "https://securetoken.google.com/<projectId>" , nerede <projectId> için kullanılan aynı proje kimliğidir aud yukarıda.
sub Ders Boş olmayan dize olmalı ve olmalı uid kullanıcı veya cihaz.
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. Genel anahtarı tut https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com ve imzayı doğrulamak için bir JWT kitaplığı kullanın. Değerini kullanın max-age içinde Cache-Control genel anahtarları yenilemek için zaman bilmek o uç noktadan tepkinin başlığındaki.

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