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 ve Local Emulator Suite'i 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 hakkında bilgi sahibi olduğunuz varsayılır. Gerekirse platform ve kimlik doğrulama tekniği kombinasyonuyla ilgili belgeleri inceleyin.

Authentication emülatörüyle ne yapabilirim?

Authentication emülatörü, Firebase Authentication'da bulunan işlevlerin çoğunu Firebase Authentication hizmetleri için yüksek kalitede yerel emülasyon sağlar. Apple platformları, Android ve Web Firebase SDK'larıyla eşlenen emülatör:

  • E-posta/şifre, telefon numarası/SMS, SMS çok öğeli ve üçüncü taraf (ör. Google) kimlik sağlayıcısı kimlik doğrulaması için emüle edilmiş kullanıcı hesapları oluşturun, güncelleyin ve yönetin
  • Emüle edilen kullanıcıları görüntüle ve düzenle
  • Özel jeton kimlik doğrulama sistemlerinin prototipini oluşturma
  • Emülatör Kullanıcı Arayüzü Günlükleri sekmesinde kimlik doğrulamayla ilgili mesajları kontrol edin.

Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesi için ürün emülasyonu yapar.

Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce, çalışma dizininizde CLI'yı firebase use çalıştırın. Alternatif olarak --project işaretini her emülatör komutuna aktarabilirsiniz.

Yerel Emulator Suite, gerçek Firebase projeleri ve demo projelerinin emülasyonunu destekler.

Proje türü Özellikler Emülatörlerle kullanım
Gerçek

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 Firebase projesi için oluşturduğunuz 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örler çalıştırabilirsiniz.

emüle etmediğiniz tüm ürünler için uygulamalarınız ve kodunuz, canlı kaynakla (veritabanı örneği, depolama paketi, işlev vb.) etkileşime girer.

Demo

Demo Firebase projesinin gerçek bir Firebase yapılandırması yoktur ve canlı kaynak yoktur. Bu projelere genellikle codelab'ler veya diğer eğiticiler aracılığıyla erişilir.

Demo projeleri için proje kimlikleri demo- önekine sahiptir.

Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşime girer. 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 olan her yerde demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:

  • Emülatörleri bir Firebase projesi oluşturmadan çalıştırabileceğiniz için kurulumu daha kolaydır
  • Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırırsa veri değişikliği, kullanım ve faturalandırma söz konusu olmayacağından daha yüksek güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek.

Emülatörle konuşmak için uygulamanızı kullanın

Android, iOS ve web SDK'ları

Kimlik Doğrulama emülatörüyle etkileşim kurmak için uygulama içi yapılandırmanızı veya test sınıflarınızı aşağıdaki gibi ayarlayın.

Kotlin+KTX
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)

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");

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

Yönetici SDK'ları

FIREBASE_AUTH_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Admin SDK'ları, 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ü, Kimlik Doğrulama emülatörünü otomatik olarak algılar. Bu nedenle, Cloud Functions ve Authentication emülatörleri arasındaki entegrasyonları test ederken bu adımı atlayabilirsiniz. Ortam değişkeni, Cloud Functions'da Yönetici SDK'sı için otomatik olarak ayarlanır.

Ortam değişkeni ayarlandığında Firebase Yönetici SDK'ları, yerel geliştirme ve testi kolaylaştırmak için Kimlik Doğrulama emülatörü tarafından yayınlanan imzasız kimlik jetonlarını ve oturum çerezlerini (sırasıyla verifyIdToken ve createSessionCookie yöntemleriyle) kabul eder. Lütfen üretimde ortam değişkenini ayarlamadığınızdan emin olun.

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

Node.js Yönetici SDK'sı
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 tarafından veya yapılandırıldığında Firebase Admin SDK'sı tarafından kabul edilen imzasız kimlik jetonları yayınlar. Bu jetonlar, üretim Firebase hizmetleri veya üretim modunda çalışan Firebase Admin SDK'sı (ör. yukarıda açıklanan kurulum adımları olmadan varsayılan davranış) tarafından reddedilir.

Emülatörü başlatma

Authentication emülatörünü Emulator Suite kullanıcı arayüzü üzerinden etkileşimli olarak ve yerel REST arayüzü üzerinden etkileşimsiz olarak 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 kullanıcı arayüzünü başlatmak için şu komutu yürütün:

firebase emulators:start

Uygulamanız, anonim kimlik doğrulama için platformunuza (iOS, Android, web) yönelik oturum açma mantığını uygulayabilir.

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

  1. Emulator Suite kullanıcı arayüzünde Authentication (Kimlik Doğrulama) sekmesini tıklayın.
  2. Kullanıcı ekle düğmesini tıklayın.
  3. E-posta kimlik doğrulama alanlarını doldurarak kullanıcı hesabı oluşturma sihirbazını izleyin.

Bir test kullanıcısı oluşturulduğunda uygulamanız, platformunuza (iOS, Android, web) uygun SDK mantığını kullanarak kullanıcının oturumunu açabilir ve kapatabilir.

E-posta bağlantısı akışlarıyla e-posta doğrulamasını/oturum açmayı test etmek için emülatör, firebase emulators:start 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ırlamalarını test etmek için emülatör, newPassword (gerektiğinde değiştirebilirsiniz) parametresi de dahil olmak üzere benzer bir URL'yi terminale 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şimsiz test

E-posta/şifre kullanıcı hesaplarını yönetmek için Emulator Suite kullanıcı arayüzünü veya istemci kodunu kullanmak yerine, kullanıcı hesapları oluşturmak ve silmek için REST API'lerini çağıran test kurulumu komut dosyaları yazabilir ve emülatör e-posta doğrulama URL'sini doldurmak için bant dışı e-posta doğrulama kodlarını alabilirsiniz. Bu, platform ve test kodunu ayrı tutar ve etkileşimsiz bir şekilde test etmenizi sağlar.

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

  1. Kimlik doğrulama signUp REST uç noktası ile kullanıcı oluşturun.
  2. Testleri gerçekleştirmek için e-postaları ve şifreleri kullanarak kullanıcıların oturumunu açın.
  3. Testleriniz için geçerliyse emülatöre özel REST uç noktasından mevcut bant dışı e-posta doğrulama kodlarını getirin.
  4. Verileri temizlemek için kullanıcı kayıtlarını emülatöre özgü REST uç noktası ile temizleyin.

Emülasyonlu telefon/SMS kimlik doğrulaması

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

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

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

Emulator Suite kullanıcı arayüzünü kullanarak:

  1. Emulator Suite kullanıcı arayüzünde Authentication (Kimlik Doğrulama) sekmesini tıklayın.
  2. Kullanıcı ekle düğmesini tıklayın.
  3. Telefon kimlik doğrulama alanlarını doldurarak kullanıcı hesabı oluşturma sihirbazını izleyin.

Ancak telefon kimlik doğrulama akışları için emülatör herhangi bir kısa mesajın teslimini TETİKLEMEZ. Çünkü operatörle iletişime geçmek kapsam dışındadır ve yerel test için uygun değildir. Bunun yerine, emülatör, SMS ile gönderilecek kodu firebase emulators:start ç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şimsiz test

Etkileşimli olmayan telefon kimlik doğrulaması testi için mevcut SMS kodlarını almak amacıyla Kimlik Doğrulama emülatörü REST API'yi kullanın. Akışı her başlattığınızda kodun farklı olduğunu unutmayın.

Tipik adım adım sırası aşağıda verilmiştir.

  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 kodunu göndererek confirmationResult.confirm(code) numaralı telefonu her zamanki gibi arayın.

Çok öğeli SMS

Kimlik Doğrulama emülatörü, iOS, Android ve web için üretimde mevcut olan SMS çok öğeli kimlik doğrulaması (MFA) akışlarının prototipini ve test edilmesini 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 çalıştırdığınız terminale gönderilir ve REST arayüzünden kullanılabilir.

Emüle üçüncü taraf kimlik sağlayıcı (IDP) kimlik doğrulaması

Kimlik Doğrulama emülatörü, üretim kodunda hiçbir değişiklik yapmadan iOS, Android veya web uygulamalarınızdaki birçok üçüncü taraf kimlik doğrulama akışını test etmenize olanak tanır. Kimlik doğrulama akışlarına dair ö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 kimlik doğrulama için iki yöntemden birini kullanabilirsiniz:

  • Uygulamanız, SDK'nın kimlik bilgilerini almak için üçüncü taraf IdP sağlayıcılarıyla olan tüm etkileşimler dahil olmak üzere tüm süreci uçtan uca yönetmesine izin verir.
  • Uygulamanız, kimlik bilgilerini söz konusu tarafın SDK'sını kullanarak bir üçüncü taraf sağlayıcıdan manuel olarak alır ve bu kimlik bilgilerini Authentication SDK'sına iletir.

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

Firebase SDK'sına dayalı IdP akışlarını test etme

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

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

IDP akışlarını manuel kimlik bilgisi alarak test etme

"Manuel" oturum açma teknikleri kullanır ve platformunuzun signInWithCredentials yöntemini çağırırsanı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 Token (JWT) olarak uygulanmış kimlik jetonları 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, JWT olmayanlar) desteklenmez. Bir sonraki bölümde bu durumlarda bir alternatif açıklanmaktadır.

Etkileşimsiz test

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

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

  1. Kodunuzun, IDP'den idToken'ları alan kısmını yeniden oluşturun veya yorumlayın. Bu sayede testleriniz sırasında gerçek kullanıcı adları ve şifreler girme ihtiyacını ortadan kaldırır ve testlerinizi IDP'deki API kotaları ve hız sınırlarından kurtarırsınız.
  2. İkinci olarak, signInWithCredential jetonu yerine düz bir JSON dizesi kullanın. Örnek olarak web SDK'sını kullanırsanız kodu şu şekilde değiştirebilirsiniz:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Emülatörle kullanıldığında bu kod, Google'da foo@example.com e-posta adresine sahip kullanıcının kimliğini başarıyla doğrular. Alt alanı birincil anahtar olarak düşünebilirsiniz. Bu anahtar, herhangi bir dizeye dönüştürülebilir ve farklı kullanıcıların oturum açmalarını taklit eder. firebase.auth.GoogleAuthProvider yerine new firebase.auth.OAuthProvider('yahoo.com') veya taklit etmek istediğiniz başka bir sağlayıcı kimliği girebilirsiniz.

Emülasyonlu özel jeton kimlik doğrulaması

Kimlik Doğrulama emülatörü, üretim Kimlik Doğrulaması belgelerinde açıklandığı gibi, desteklenen platformlarda signInWithCustomToken yöntemine yapılan çağrıları kullanarak özel JSON Web Jetonları ile kimlik doğrulamayı işler.

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

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

Cloud IAM

Firebase Emulator Suite, IAM ile ilgili çalışma amaçlı davranışları kopyalamaya veya bunlara saygı göstermeye çalışmaz. Emülatörler, sağlanan Firebase Güvenlik Kurallarına uyar ancak IAM'nin normalde kullanılması gereken durumlarda (ör. Cloud Functions'ın hizmet hesabını çağırıp izinleri ayarlamak için kullanılır) emülatör yapılandırılamaz ve doğrudan yerel komut dosyası çalıştırmaya benzer şekilde geliştirici makinenizde küresel olarak kullanılabilen hesabı kullanır.

Mobil platformlarda, e-posta bağlantısıyla oturum açma işlemi Firebase Dynamic Links'e bağlı olduğundan 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ılardan alınan güvenli kimlik bilgilerini kullanır.

Google ve Apple gibi RFC Connect sağlayıcılarından gelen gerçek kimlik bilgileri, Kimlik Doğrulama emülatörü tarafından kabul edilir. COPPA olmayan Connect sağlayıcılarından gelen kimlik bilgileri desteklenmez.

E-posta / SMS ile oturum açma

Üretim uygulamalarındaki e-posta ve SMS oturum açma akışları, kullanıcının alınan mesajı kontrol edip oturum açma arayüzüne bir giriş kodu girdiği eşzamansız bir işlem içerir. Kimlik Doğrulama emülatörü herhangi bir e-posta veya SMS mesajı göndermez ancak yukarıda açıklandığı gibi giriş kodları oluşturur ve bunları testte kullanılacak terminale çıkarır.

Emülatör, Firebase konsolu kullanılarak yapılabileceği gibi sabit giriş kodlarıyla test telefon numaralarını tanımlama özelliğini desteklemez.

Özel jeton kimlik doğrulaması

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

Oran sınırlama / kötüye kullanımı önleme

Kimlik Doğrulama emülatörü, üretim hızı sınırlamasını veya kötüye kullanımı önleme özelliklerini çoğaltmaz.

Engelleme işlevleri

Üretimde, hem beforeCreate hem de beforeSignIn etkinlikleri tetiklendikten sonra kullanıcılar depolama alanına bir kez yazılır. Ancak, teknik sınırlamalar nedeniyle Kimlik Doğrulama emülatörü, bir kez kullanıcı oluşturulduktan sonra ve bir kez oturum açtıktan sonra olmak üzere iki kez depolamaya yazar. Bu, yeni kullanıcılar için Kimlik Doğrulama emülatöründe beforeSignIn uygulamasında getAuth().getUser() yöntemini başarıyla çağırabileceğiniz ancak üretim aşamasında bu işlemi yaptığınızda bir hatayla karşılaşacağınız anlamına gelir.

Sonrasında ne olacak?