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.