Uygulamanızı Kimlik Doğrulama Emülatörü'ne bağlama

Uygulamanızda Authentication emülatörünü kullanmadan önce genel Firebase Local Emulator Suite iş akışını anladığınızdan, Local Emulator Suite aracını yükleyip yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.

Bu konuda, üretim için Firebase Authentication çözümleri geliştirme konusunda bilgi sahibi olduğunuz varsayılmaktadır. Gerekirse platform ve kimlik doğrulama tekniği kombinasyonunuz ile ilgili belgeleri inceleyin.

Authentication emülatörüyle neler yapabilirim?

Authentication emülatörü, Firebase Authentication hizmetlerinin yüksek kaliteli yerel emülasyonunu sunarak üretim Firebase Authentication'da bulunan işlevlerin çoğunu sağlar. Apple platformları, Android ve web Firebase SDK'larıyla birlikte kullanılan emülatör sayesinde şunları yapabilirsiniz:

  • E-posta/şifre, telefon numarası/SMS, SMS çok faktörlü ve üçüncü taraf (ör. Google) kimlik sağlayıcı kimlik doğrulamasını test etmek için emülasyonu yapılan kullanıcı hesapları oluşturma, güncelleme ve yönetme
  • Emüle edilen kullanıcıları görüntüleme ve düzenleme
  • Özel jeton kimlik doğrulama sistemlerinin prototipini oluşturma
  • Kimlik doğrulamayla ilgili mesajları Emulator UI Logs (Emülatör Kullanıcı Arayüzü Günlükleri) sekmesinde kontrol edin.

Firebase projesi seçme

Firebase Local Emulator Suite, tek bir Firebase projesi için ürünleri taklit eder.

Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce çalışma dizininizdeki KSA'da firebase use komutunu çalıştırın. Alternatif olarak, her emülatör komutuna --project işaretini iletebilirsiniz.

Local Emulator Suite, gerçek Firebase projelerinin ve demo projelerin emülasyonunu destekler.

Proje türü Özellikler Emülatörlerle kullanma
Real

Gerçek bir Firebase projesi, sizin oluşturduğunuz ve yapılandırdığınız (büyük olasılıkla Firebase konsolu üzerinden) bir projedir.

Gerçek projelerde veritabanı örnekleri, depolama paketleri, işlevler veya ilgili Firebase projesi için ayarladığınız diğer kaynaklar gibi canlı kaynaklar bulunur.

Gerçek Firebase projeleriyle çalışırken desteklenen ürünlerin herhangi biri veya tümü için emülatör çalıştırabilirsiniz.

Emüle etmediğiniz ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama alanı paketi, işlev vb.) etkileşim kurar.

Demo

Demo Firebase projesinde gerçek Firebase yapılandırması ve canlı kaynaklar yoktur. Bu projelere genellikle codelab'ler veya diğer eğitimler üzerinden erişilir.

Demo projelerinin proje kimliklerinde demo- ön eki bulunur.

Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşim kurar. Uygulamanız, emülatörün çalışmadığı bir kaynakla etkileşim kurmaya çalışırsa bu kod başarısız olur.

Mümkün olduğunda demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:

  • Firebase projesi oluşturmadan emülatörleri çalıştırabildiğiniz için daha kolay kurulum
  • Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırırsa veri değişikliği, kullanım ve faturalandırma olasılığı olmadığından daha güçlü güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek sunulur.

Uygulamanızı emülatörle iletişim kuracak şekilde yapılandırma

Android, iOS ve web SDK'ları

Uygulama içi yapılandırmanızı veya test sınıflarınızı Authentication emülatörüyle etkileşim kuracak şekilde aşağıdaki gibi ayarlayın.

Kotlin
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Swift
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
Unity
FirebaseAuth auth = FirebaseAuth.DefaultInstance;
// Connects to the Auth Emulator running on port 9099
auth.UseEmulator("127.0.0.1", 9099);

Web

import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://127.0.0.1:9099");

Web

const auth = firebase.auth();
auth.useEmulator("http://127.0.0.1:9099");

Cloud Firestore veya Realtime Database için Authentication ile Cloud Functions ya da Firebase Security Rules arasındaki etkileşimlerin prototipini oluşturmak ve test etmek için ek kurulum gerekmez. Authentication emülatörü yapılandırıldığında ve diğer emülatörler çalışırken otomatik olarak birlikte çalışırlar.

Admin SDK

FIREBASE_AUTH_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Admin SDK, Authentication emülatörüne otomatik olarak bağlanır.

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

Cloud Functions emülatörünün Authentication emülatörünü otomatik olarak tanıdığını unutmayın. Bu nedenle, Cloud Functions ve Authentication emülatörleri arasındaki entegrasyonları test ederken bu adımı atlayabilirsiniz. Ortam değişkeni, Cloud Functions içindeki Admin SDK için otomatik olarak ayarlanır.

Ortam değişkeni ayarlandığında Firebase Admin SDK, yerel geliştirme ve test işlemlerini kolaylaştırmak için Authentication emülatörü tarafından verilen imzasız kimlik jetonlarını ve oturum çerezlerini (sırasıyla verifyIdToken ve createSessionCookie yöntemleri aracılığıyla) kabul eder. Lütfen ortam değişkenini üretimde ayarlamadığınızdan emin olun.

Admin SDK kodunuzun başka bir ortamda çalışan paylaşılan bir emülatöre bağlanmasını istiyorsanız Firebase CLI'yi kullanarak ayarladığınız proje kimliğini belirtmeniz gerekir. Proje kimliğini doğrudan initializeApp aracına iletebilir veya GCLOUD_PROJECT ortam değişkenini ayarlayabilirsiniz.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Ortam Değişkeni
export GCLOUD_PROJECT="your-project-id"

Kimlik Jetonları

Güvenlik nedeniyle Authentication emülatörü, yalnızca diğer Firebase emülatörleri veya yapılandırıldığında Firebase Admin SDK tarafından kabul edilen imzasız kimlik jetonları yayınlar. Bu jetonlar, üretim Firebase hizmetleri veya üretim modunda çalışan Firebase Admin SDK tarafından reddedilir (ör. yukarıda açıklanan kurulum adımları olmadan varsayılan davranış).

Emülatörü başlatma

Authentication emülatörünü Emulator Suite UI üzerinden etkileşimli olarak ve yerel REST arayüzü üzerinden etkileşimli olmayan şekilde kullanabilirsiniz. Aşağıdaki bölümlerde etkileşimli ve etkileşimli olmayan kullanım alanları ele alınmaktadır.

Authentication emülatörünü, REST arayüzünü ve Emulator Suite UI aracını başlatmak için şu komutu çalıştırın:

firebase emulators:start

Anonim kimlik doğrulama için uygulamanız, platformunuzun (iOS, Android, web) oturum açma mantığını kullanabilir.

E-posta/şifre kimlik doğrulaması için Authentication SDK yöntemlerini kullanarak uygulamanızdan Authentication emülatörüne kullanıcı hesapları ekleyerek veya Emulator Suite UI kullanarak prototip oluşturmaya başlayabilirsiniz.

  1. Emulator Suite UI bölümünde Authentication (Kimlik Doğrulama) sekmesini tıklayın.
  2. Kullanıcı ekle düğmesini tıklayın.
  3. Kullanıcı hesabı oluşturma sihirbazını takip ederek e-posta kimlik doğrulama alanlarını doldurun.

Test kullanıcısı oluşturulduktan sonra uygulamanız, platformunuzun SDK mantığıyla kullanıcının oturumunu açıp kapatabilir (iOS, Android, web).

E-posta doğrulaması/e-posta bağlantısıyla oturum açma akışlarını test etmek için emülatör, firebase emulators:start komutunun yürütüldüğü terminale bir URL yazdırır.

i  To verify the email address customer@ex.com, follow this link:
http://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key

Doğrulama etkinliğini simüle etmek için bağlantıyı tarayıcınıza yapıştırın ve doğrulamanın başarılı olup olmadığını kontrol edin.

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"
  }
}

Şifre sıfırlama işlemlerini test etmek için emülatör, terminale newPassword parametresi (gerektiğinde değiştirebilirsiniz) içeren benzer bir URL yazdırır.

http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

Etkileşimli olmayan testler

E-posta/şifre kullanıcı hesaplarını yönetmek için Emulator Suite UI veya istemci kodunu kullanmak yerine, kullanıcı hesapları oluşturup silmek ve emülatör e-posta doğrulama URL'sini doldurmak için bant dışı e-posta doğrulama kodlarını getirmek üzere REST API'leri çağıran test kurulum komut dosyaları yazabilirsiniz. Bu sayede platform ve test kodu ayrı tutulur ve etkileşimli olmayan testler yapabilirsiniz.

Etkileşimli olmayan e-posta ve şifre testi akışları için tipik sıra aşağıdaki gibidir.

  1. Authentication signUp REST uç noktası ile kullanıcı oluşturun.
  2. Testleri gerçekleştirmek için e-posta adreslerini ve şifreleri kullanarak kullanıcıların oturum açmasını sağlayın.
  3. Testleriniz için geçerliyse emülatöre özel REST uç noktasından bant dışı e-posta doğrulama kodlarını alın.
  4. Verileri temizlemek için emülatöre özel REST uç noktasıyla kullanıcı kayıtlarını temizleyin.

Öykünülmüş telefon/SMS kimlik doğrulaması

Auth emülatörü, telefonla kimlik doğrulama için aşağıdakileri desteklemez:

  • reCAPTCHA ve APN akışları. İstemci SDK'ları, emülatörle etkileşim kuracak şekilde yapılandırıldıktan sonra bu doğrulama yöntemlerini entegrasyon testi için açıklanan yönteme benzer şekilde devre dışı bırakır (iOS, Android, web).
  • Firebase Console'da önceden yapılandırılmış kodlarla telefon numaralarını test edin.

Bunun dışında, istemci kodu açısından telefon/SMS kimlik doğrulama akışı, üretim için açıklananla (iOS, Android, web) aynıdır.

Emulator Suite UI kullanma:

  1. Emulator Suite UI bölümünde Authentication (Kimlik Doğrulama) sekmesini tıklayın.
  2. Kullanıcı ekle düğmesini tıklayın.
  3. Telefonla kimlik doğrulama alanlarını doldurarak kullanıcı hesabı oluşturma sihirbazını takip edin.

Ancak telefonla kimlik doğrulama akışlarında emülatör, herhangi bir kısa mesajın gönderilmesini tetiklemez. Çünkü bir operatörle iletişime geçmek kapsam dışıdır ve yerel test için uygun değildir. Bunun yerine emülatör, SMS ile gönderilecek kodu firebase emulators:start komutunu çalıştırdığınız terminale yazdırır. Kullanıcıların kısa mesajlarını kontrol etmesini simüle etmek için bu kodu uygulamaya girin.

Etkileşimli olmayan testler

Etkileşimli olmayan telefon kimlik doğrulaması testi için Authentication emülatör REST API'sini kullanarak mevcut SMS kodlarını alın. Akışı her başlattığınızda kodun farklı olacağını unutmayın.

Tipik sıra aşağıdaki gibidir.

  1. Doğrulama sürecini başlatmak için signInWithPhoneNumber platformunu arayın.
  2. Emülatöre özel REST uç noktasını kullanarak doğrulama kodunu alın.
  3. Doğrulama koduyla confirmationResult.confirm(code) numaralı telefonu her zamanki gibi arayın.

Çok öğeli SMS

Authentication emülatörü, iOS, Android ve web için üretimde kullanılabilen SMS çok faktörlü kimlik doğrulama (MFA) akışlarının prototipini oluşturmayı ve test etmeyi destekler.

Emülatöre bir sahte kullanıcı eklediğinizde, MFA'yı etkinleştirebilir ve ikinci faktör SMS mesajlarının gönderileceği bir veya daha fazla telefon numarası yapılandırabilirsiniz. Mesajlar, firebase emulators:start komutunu çalıştırdığınız terminale gönderilir ve REST arayüzünden erişilebilir.

Öykünülmüş üçüncü taraf kimlik sağlayıcı (IdP) kimlik doğrulaması

Authentication emülatörü, iOS, Android veya web uygulamalarınızdaki birçok üçüncü taraf kimlik doğrulama akışını üretim kodunda değişiklik yapmadan test etmenize olanak tanır. Kimlik doğrulama akışlarıyla ilgili örnekler için uygulamanızda kullanabileceğiniz çeşitli sağlayıcı ve platform kombinasyonları ile ilgili belgelere bakın.

Genel olarak, Firebase SDK'sını kullanarak iki yöntemden biriyle kimlik doğrulayabilirsiniz:

  • Uygulamanız, kimlik bilgilerini almak için üçüncü taraf kimlik sağlayıcılarla yapılan tüm etkileşimler de dahil olmak üzere tüm sürecin uçtan uca SDK tarafından yönetilmesine olanak tanır.
  • Uygulamanız, üçüncü taraf sağlayıcının SDK'sını kullanarak kimlik bilgilerini manuel olarak alır ve bu kimlik bilgilerini Authentication SDK'ya iletir.

Yukarıdaki belge bağlantısını tekrar kontrol edin ve kullanmak istediğiniz akışa (Firebase SDK'sı tarafından yönetilen veya manuel kimlik bilgisi alma) aşina olduğunuzdan emin olun. Authentication emülatörü, her iki yaklaşımın da test edilmesini destekler.

Firebase SDK'sı tarafından yönlendirilen kimlik sağlayıcı akışlarını test etme

Uygulamanız, Microsoft, GitHub veya Yahoo ile oturum açmak için OAuthProvider gibi uçtan uca Firebase SDK'sı akışları kullanıyorsa Authentication emülatörü, etkileşimli test için ilgili oturum açma sayfasının yerel bir sürümünü sunar. Bu sayede, signinWithPopup veya signInWithRedirect yöntemini çağıran web uygulamalarından kimlik doğrulamayı test edebilirsiniz. Yerel olarak sunulan bu oturum açma sayfası, platformunuzun webview kitaplığı tarafından oluşturulan mobil uygulamalarda da görünür.

Emülatör, akışlar devam ederken gerektiğinde sahte üçüncü taraf kullanıcı hesapları ve kimlik bilgileri oluşturur.

Kimlik bilgileri manuel olarak alınarak IdP akışlarını test etme

"Manuel" oturum açma tekniklerini kullanıyor ve platformunuzun signInWithCredentials yöntemini çağırıyorsanız uygulamanız her zamanki gibi gerçek üçüncü taraf oturum açma isteğinde bulunur ve gerçek üçüncü taraf kimlik bilgilerini alır.

Emülatörün yalnızca Google ile Oturum Açma, Apple ve JSON Web Jetonları (JWT'ler) olarak uygulanan kimlik jetonlarını kullanan diğer sağlayıcılardan alınan kimlik bilgileri için signInWithCredential kimlik doğrulamasını desteklediğini unutmayın. Erişim jetonları (ör. Facebook veya Twitter tarafından sağlanan ve JWT olmayan jetonlar) desteklenmez. Sonraki bölümde, bu gibi durumlarda kullanılabilecek bir alternatif ele alınmaktadır.

Etkileşimli olmayan testler

Etkileşimli olmayan test yöntemlerinden biri, emülatör tarafından sunulan oturum açma sayfasında kullanıcı tıklamalarını otomatikleştirmektir. Web uygulamaları için WebDriver gibi bir kontrol arayüzü kullanın. Mobil cihazlar için Espresso veya Xcode gibi platformunuzun kullanıcı arayüzü test araçlarını kullanın.

Alternatif olarak, kodunuzu signInWithCredential kullanacak şekilde güncelleyebilir (ör. bir kod dalında) ve hesaplar için gerçek kimlik bilgileri yerine sahte kimlik jetonları içeren bir jeton kimlik doğrulama akışı kullanabilirsiniz.

  1. Kodunuzun, IdP'den idToken'ları alan kısmını yeniden bağlayın veya açıklama satırı yapın. Bu sayede, testleriniz sırasında gerçek kullanıcı adları ve şifreler girmeniz gerekmez ve testleriniz, IdP'deki API kotalarından ve sıklık sınırlamalarından etkilenmez.
  2. İkinci olarak, signInWithCredential için jeton yerine değişmez bir JSON dizesi kullanın. Web SDK'sını örnek olarak kullanarak kodu şu şekilde değiştirebilirsiniz:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Bu kod, emülatörle kullanıldığında Google'da foo@example.com e-posta adresine sahip bir kullanıcının kimliğini başarıyla doğrular. Sub alanını birincil anahtar olarak düşünün. Bu alan, farklı kullanıcıların oturum açma işlemlerini taklit etmek için herhangi bir dizeyle değiştirilebilir. firebase.auth.GoogleAuthProvider değerini, örneğin new firebase.auth.OAuthProvider('yahoo.com') veya taklit etmek istediğiniz başka bir sağlayıcı kimliğiyle değiştirebilirsiniz.

Öykünülmüş özel jeton kimlik doğrulaması

Authentication emülatörü, üretim Authentication belgelerinde açıklandığı gibi, desteklenen platformlarda signInWithCustomToken yöntemine yapılan çağrıları kullanarak özel JSON Web Jetonları ile kimlik doğrulama işlemini gerçekleştirir.

Authentication emülatörünün üretimden farkı

Firebase Authentication emülatörü, üretim ürününün birçok özelliğini simüle eder. Ancak her türlü kimlik doğrulama sistemi birden fazla düzeyde (cihaz, üçüncü taraf sağlayıcılar, Firebase vb.) güvenliğe büyük ölçüde dayandığından emülatörün tüm akışları düzgün bir şekilde yeniden oluşturması zordur.

Cloud IAM

Firebase Emulator Suite, çalıştırma için IAM ile ilgili davranışları kopyalamaya veya bunlara uymaya çalışmaz. Emülatörler, sağlanan Firebase Güvenlik Kuralları'na uyar ancak normalde IAM'nin kullanılacağı durumlarda (ör. Cloud Functions'ı çağıracak hizmet hesabını ve dolayısıyla izinleri ayarlamak için) emülatör yapılandırılamaz ve doğrudan yerel bir komut dosyası çalıştırmaya benzer şekilde geliştirici makinenizdeki genel olarak kullanılabilen hesabı kullanır.

Mobil platformlarda e-posta bağlantısıyla oturum açma işlemi Firebase Dynamic Links'i kullandığından, bu tür tüm bağlantılar (mobil) web platformunda açılır.

Üçüncü taraf oturum açma

Firebase Authentication, üçüncü taraf oturum açma akışları için Twitter ve GitHub gibi üçüncü taraf sağlayıcıların güvenlik amaçlı kimlik bilgilerini kullanır.

Google ve Apple gibi OpenID Connect sağlayıcılarından alınan gerçek kimlik bilgileri Authentication emülatörü tarafından kabul edilir. OpenID Connect dışındaki sağlayıcılardan alınan kimlik bilgileri desteklenmez.

E-posta/SMS ile oturum açma

Üretim uygulamalarında, e-posta ve SMS ile oturum açma akışları, kullanıcının gelen mesajı kontrol ettiği ve oturum açma arayüzüne bir giriş kodu girdiği eşzamansız bir işlem içerir. Authentication emülatörü e-posta veya SMS mesajı göndermez ancak yukarıda açıklandığı gibi, giriş kodları oluşturur ve bunları testlerde kullanılmak üzere terminale gönderir.

Emülatör, Firebase konsolunda olduğu gibi sabit giriş kodlarına sahip test telefon numaraları tanımlama özelliğini desteklemez.

Özel jeton kimlik doğrulaması

Authentication emülatörü, özel jetonların imzasını veya geçerlilik süresini doğrulamaz. Bu sayede, prototip oluşturma ve test senaryolarında özel olarak hazırlanmış jetonları kullanabilir ve jetonları süresiz olarak yeniden kullanabilirsiniz.

Sıklık sınırlaması/kötüye kullanımı önleme

Authentication emülatörü, üretim sıklık sınırlaması veya kötüye kullanım karşıtı özellikleri kopyalamaz.

Engelleme işlevleri

Üretimde, hem beforeCreate hem de beforeSignIn etkinlikleri tetiklendikten sonra kullanıcılar bir kez depolama alanına yazılır. Ancak teknik sınırlamalar nedeniyle Authentication emülatörü, biri kullanıcı oluşturulduktan sonra, diğeri ise oturum açıldıktan sonra olmak üzere depolama alanına iki kez yazar. Bu, yeni kullanıcılar için Authentication emülatöründe beforeSignIn içinde getAuth().getUser() yöntemini başarıyla çağırabileceğiniz ancak üretimde bunu yaparken bir hatayla karşılaşacağınız anlamına gelir.

Sonrasında ne olacak?