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

Authentication emülatörünü uygulamanızla kullanmadan önce Firebase Local Emulator Suite iş akışını genel olarak anladığınızdan, Local Emulator Suite'yi 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 dokümanları inceleyin.

Authentication emülatörüyle neler yapabilirim?

Authentication emülatörü, üretim Firebase Authentication'de bulunan işlevlerin çoğunu sunarak Firebase Authentication hizmetlerinin yüksek kaliteli yerel emülasyonunu 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 taklit edilmiş kullanıcı hesapları oluşturun, güncelleyin ve yönetin
  • Taklit edilen kullanıcıları görüntüleme ve düzenleme
  • Özel jeton kimlik doğrulama sistemleri için prototip oluşturma
  • Emülatör kullanıcı arayüzü günlükleri sekmesinde kimlik doğrulamasıyla ilgili mesajları kontrol edin.

Firebase projesi seçme

Firebase Local Emulator Suite, tek bir Firebase projesinin ürünlerini taklit eder.

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

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

Proje türü Özellikler Emülatörlerle kullanma
Gerçek

Gerçek Firebase projesi, oluşturduğunuz ve yapılandırdığınız (muhtemelen Firebase konsolu üzerinden) projedir.

Gerçek projelerde veritabanı örnekleri, depolama alanı paketleri, işlevler veya söz konusu 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ör çalıştırabilirsiniz.

Emülasyon oluşturmadığınız ürünlerde uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama alanı paketi, işlev vb.) etkileşim kurar.

Demo

Demo Firebase projelerinde gerçek Firebase yapılandırması ve canlı kaynak bulunmaz. Bu projelere genellikle codelab'ler veya diğer eğitici içerikler üzerinden erişilir.

Demo projelerin proje kimliklerinde demo- ön ek 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ün çalışmadığı bir kaynağa etkileşime geçmeye ç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ırabileceğiniz için daha kolay kurulum
  • Kodunuz yanlışlıkla taklit edilmeyen (ü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.

Uygulamanızı, emülatörle konuşacak şekilde donatma

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şime geçecek şekilde 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");

Authentication ile Cloud Functions veya Cloud Firestore için Firebase Security Rules ya da Realtime Database 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 bunlar otomatik olarak birlikte çalışır.

Admin SDK

FIREBASE_AUTH_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Admin SDK'ler otomatik olarak Authentication emülatörüne 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 algıladığı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'daki Admin SDK için otomatik olarak ayarlanır.

Ortam değişkeni ayarlandığında Firebase Admin SDK'ler, yerel geliştirme ve test sürecini 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 üretim ortamında ortam değişkenini 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. Bir proje kimliğini doğrudan initializeApp 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 veya yapılandırılmış Firebase Admin SDK'sı tarafından kabul edilen imzasız kimlik jetonları yayınlar. Bu jetonlar, üretim modunda çalışan üretim Firebase hizmetleri veya 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 UI ü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 UI'ü başlatmak için şunları yürütü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 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ı uygulayın.

Oluşturulan test kullanıcısıyla uygulamanız, platformunuzun (iOS, Android, web) SDK mantığıyla kullanıcıyı oturum açmaya ve oturum kapatmaya yönlendirebilir.

Emülatör, e-posta doğrulama/e-posta bağlantısıyla oturum açma akışlarını test etmek için firebase emulators:start'ün 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 ve doğrulamanın başarılı olup olmadığını kontrol etmek için bağlantıyı tarayıcınıza yapıştırın.

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

Şifre sıfırlamayı test etmek için emülatör, terminale bir newPassword parametresi (gerekirse 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 test

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

Etkileşimli olmayan e-posta ve şifre test akışlarında tipik sıra aşağıdaki gibidir.

  1. Authentication signUp REST uç noktası ile kullanıcı oluşturun.
  2. Test yapmak 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ı alın.
  4. Verileri temizlemek için emülatöre özgü REST uç noktası ile kullanıcı kayıtlarını temizleyin.

Taklit edilmiş telefon/SMS kimlik doğrulaması

Kimlik doğrulama emülatörü, telefon kimlik doğrulaması için aşağıdakileri desteklemez:

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

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

Emulator Suite UI'ü kullanarak:

  1. Emulator Suite UI bölümünde 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ı uygulayın.

Ancak telefon kimlik doğrulama akışlarında, operatörle iletişime geçmek kapsam dışında olduğundan ve yerel test için uygun olmadığından emülatör kısa mesajların teslimini Tetiklemez. Bunun yerine, emülatör, firebase emulators:start çalıştırdığınız terminale SMS ile gönderilecek olan kodu 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 test

Etkileşimli olmayan telefon kimlik doğrulama testi için mevcut SMS kodlarını almak üzere Authentication emülatör REST API'sini kullanın. Akış başlattığınızda kodun her seferinde farklı olduğunu 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 özgü REST uç noktasını kullanarak doğrulama kodunu alın.
  3. Doğrulama kodunu bildirmek için 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 örnek bir kullanıcı eklediğinizde çok faktörlü kimlik doğrulamayı 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.

Taklit edilen üçüncü taraf kimlik sağlayıcı (IDP) kimlik doğrulaması

Authentication emülatörü, iOS, Android veya web uygulamalarınızda birçok üçüncü taraf kimlik doğrulama akışını üretim kodunda herhangi bir değişiklik yapmadan test etmenizi sağlar. Kimlik doğrulama akışlarına dair örnekler için uygulamanızda kullanabileceğiniz çeşitli sağlayıcı ve platform kombinasyonlarının dokümanlarına bakın.

Genel olarak, kimlik doğrulama için Firebase SDK'sını iki şekilde kullanabilirsiniz:

  • Uygulamanız, kimlik bilgilerini almak için üçüncü taraf IdP sağlayıcılarla yapılan tüm etkileşimler de dahil olmak üzere sürecin tamamını SDK'nın uçtan uca işlemesine izin verir.
  • 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'sına iletir.

Yine yukarıdaki doküman bağlantısını 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. Authentication emülatörü, her iki yaklaşımın da test edilmesini destekler.

Firebase SDK'sı tarafından desteklenen IDP akışlarını test etme

Uygulamanız, Microsoft, GitHub veya Yahoo ile oturum açma için OAuthProvider gibi bir Firebase SDK uçtan uca akışı kullanıyorsa etkileşimli test için Authentication emülatörü, signinWithPopup veya signInWithRedirect yöntemini çağıran web uygulamalarından kimlik doğrulamayı test etmenize yardımcı olmak amacıyla 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österilir.

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

Manuel kimlik bilgisi alma ile IDP akışlarını test etme

"Manuel" oturum açma teknikleri kullanıyorsanız ve platformunuzun signInWithCredentialsyöntemini çağırırsanız uygulamanız her zamanki gibi gerçek üçüncü taraf oturum açma işlemini ister 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 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 olmayanlar) desteklenmez. Bu tür durumlarda kullanılabilecek bir alternatif, sonraki bölümde ele alınmaktadır.

Etkileşimli olmayan test

Etkileşimli olmayan test için bir yaklaşım, 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 cihazlar için Espresso veya Xcode gibi platformunuzdaki kullanıcı arayüzü test araçlarını kullanın.

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

  1. Kodunuzun, kimlik jetonlarını IdP'den alan bölümünü yeniden bağlayın veya yorumlayın. Bu, testleriniz sırasında gerçek kullanıcı adları ve şifreler girme ihtiyacını ortadan kaldırır ve testlerinizi IdP'deki API kotalarından ve ücret sınırlarından kurtarır.
  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 birlikte kullanıldığında Google'da foo@example.com e-posta adresine sahip bir kullanıcının kimliğini başarıyla doğrular. Alt alanı, farklı kullanıcıların oturum açmasını taklit ederek herhangi bir dizeyle değiştirilebilen birincil anahtar olarak düşünün. 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.

Taklit edilen özel jeton kimlik doğrulaması

Authentication emülatörü, üretim Authentication dokümanlarında açıklandığı gibi, desteklenen platformlarda signInWithCustomToken yöntemine yapılan çağrıları kullanarak özel JSON Web jetonlarıyla kimlik doğrulamasını yönetir.

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ür kimlik doğrulama sistemi, birden fazla düzeyde (cihaz, üçüncü taraf sağlayıcılar, Firebase vb.) güvenlikten büyük ölçüde yararlandığından, emülatör'ün tüm akışları düzgün şekilde yeniden oluşturması zordur.

Cloud IAM

Firebase Emulator Suite, IAM ile ilgili herhangi bir çalışma davranışını kopyalamaya veya bu davranışa uymaya çalışmaz. Emülatörler, sağlanan Firebase Güvenlik Kuralları'na uyar. Ancak IAM'ın normalde kullanılacağı durumlarda (ör. Cloud Functions'ın çağıracağı 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 herkese açık hesabı kullanır.

Mobil platformlarda e-posta bağlantısı ile oturum açma özelliği Firebase Dynamic Links'i kullandığından, bu tür bağlantıların tümü bunun yerine (mobil) web platformunda açılır.

Üçüncü taraf oturum açma

Firebase Authentication, üçüncü taraf oturum açma akışlarında Twitter ve Github gibi üçüncü taraf sağlayıcıların güvenli 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ıların kimlik bilgileri desteklenmez.

E-posta / SMS ile oturum açma

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

Emülatör, Firebase konsolu kullanılarak yapılabileceği 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, manuel olarak oluşturulmuş jetonları kullanabilir ve prototip oluşturma ve test senaryolarında jetonları süresiz olarak yeniden kullanabilirsiniz.

Sıklık sınırlaması / kötüye kullanıma karşı önlemler

Authentication emülatörü, üretim hız sınırlama veya kötüye kullanım karşıtı özellikleri kopyalamamaktadır.

Engelleme işlevleri

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

Sonrasında ne olacak?