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. Ardından, sunucuda, uid
belirtecinin bütünlüğünü ve gerçekliğini doğrulayın ve kullanıcı kimliğini ondan alın. Sunucunuzda şu anda oturum açmış olan kullanıcıyı güvenli bir şekilde tanımlamak için bu şekilde uid
kimliğini kullanabilirsiniz.
Sen başlamadan önce
Firebase Admin SDK ile kimlik belirteçlerini 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.
İ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 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. İstemciden kimlik belirtecini 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
// ...
}
ağ
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. Kodu çözülen uid
kullanıcının veya cihazın kullanıcı kimliğini 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 biri aracılığıyla 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 ayarlanırsa 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. İlk olarak, diliniz için bir üçüncü taraf 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 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 Simgesi 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ççı | "https://securetoken.google.com/<projectId>" ; burada <projectId> , yukarıda aud için kullanılan proje kimliğiyle aynıdır. |
sub | Ders | Boş olmayan bir dize olmalı ve kullanıcının veya cihazın kullanıcı uid olmalıdır. |
auth_time | kimlik doğrulama zamanı | Geçmişte olmalı. Kullanıcının kimliğinin doğrulandığı zaman. |
Son olarak, kimlik belirtecinin, belirtecin kid
talebine karşılık gelen özel anahtar tarafından imzalandığından emin olun. Genel anahtarı https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com
alın ve imzayı doğrulamak için bir JWT kitaplığı kullanın. Ortak anahtarların ne zaman yenileneceğini bilmek için o uç noktadan gelen yanıtın Cache-Control
üst bilgisindeki max-age
değerini kullanın.
Yukarıdaki tüm doğrulamalar başarılı olursa, ilgili kullanıcı veya cihazın kullanıcı kimliği olarak uid
belirtecinin konusunu ( sub
) kullanabilirsiniz.