Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Kimlik Jetonlarını Doğrula

Firebase istemci uygulamanız özel bir arka uç sunucusuyla iletişim kuruyorsa, o sunucuda o anda oturum açmış olan kullanıcıyı belirlemeniz 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 jetonunu sunucunuza gönderin. Sonra, sunucu üzerinde, jetonun kimlik bütünlüğünü ve özgünlüğünü doğrulamak ve almak uid ondan. Sunucunuzda o anda oturum uid olan uid güvenli bir şekilde tanımlamak için bu şekilde iletilen uid kimliğini kullanabilirsiniz.

Sen başlamadan önce

Firebase Admin SDK ile kimlik jetonlarını doğrulamak için bir hizmet hesabınızın olması gerekir. Admin SDK'nın bir hizmet hesabıyla nasıl başlatılacağı hakkında daha fazla bilgi için Admin SDK kurulum talimatlarını izleyin.

İstemcilerde kimlik jetonlarını alın

Bir kullanıcı veya cihaz başarıyla oturum açtığında Firebase, onları benzersiz ş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 jetonu oluşturur. Özel arka uç sunucunuzdaki kullanıcıyı veya cihazı tanımlamak için bu kimlik jetonunu yeniden kullanabilirsiniz. Kimlik jetonunu istemciden almak için kullanıcının oturum açtığından emin olun ve ardından oturum açmış kullanıcıdan kimlik jetonunu 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
          // ...
}];
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();
            }
        }
    });

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 jetonunuz olduğunda, bu JWT'yi arka ucunuza gönderebilir ve Firebase Admin SDK'yi 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 kullanarak kimlik jetonlarını doğrulayın

Firebase Admin SDK, kimlik jetonlarını doğrulamak ve çö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. uid çözülen jetondan kullanıcının veya cihazın kullanıcı kimliğini alabilirsiniz.

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

Node.js

// idToken comes from the client app
admin
  .auth()
  .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']

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ı 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ı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 kod için kullanılabilir.

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

Arka ucunuz Firebase Admin SDK tarafından desteklenmeyen bir dildeyse yine de kimlik jetonlarını doğrulayabilirsiniz. Öncelikle, diliniz için üçüncü taraf bir 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:

ID Jeton Başlığı Hak 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 jetonunun yükünün aşağıdaki kısıtlamalara uygun olduğunu doğrulayın:

ID Token Yük İddiaları
exp Son kullanma süresi Gelecekte olmalı. Zaman, UNIX döneminden bu yana saniye cinsinden ölçülür.
iat Verildiği zaman Geçmişte olmalı. Zaman, UNIX döneminden bu yana saniye cinsinden ölçülür.
aud Seyirci Firebase projenizin benzersiz tanımlayıcısı olan Firebase proje kimliğiniz olmalıdır ve söz konusu projenin konsolunun URL'sinde bulunabilir.
iss İhraççı "https://securetoken.google.com/<projectId>" olmalı, burada <projectId> yukarıdaki aud için kullanılan proje kimliğiyle aynıdır.
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 süresi Geçmişte olmalı. Kullanıcının kimliğini doğruladığı zaman.

Son olarak, kimlik jetonunun jetonun kid talebine karşılık gelen özel anahtarla imzalandığından emin olun. 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. Genel anahtarların ne zaman yenileneceğini bilmek için o uç noktadan gelen 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.