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 eşlenen emülatör:

  • 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 projesi için ürün emülasyonu yapar.

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 ayarlama

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 ya da Cloud Firestore veya Realtime Database için Firebase Security Rules arasındaki etkileşimlerin prototipini oluşturmak ve test etmek üzere 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ı ve bu nedenle Cloud Functions ile 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 üretimde 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. 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 veya yapılandırılmış 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 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 öğesini 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 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 içinde 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.

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'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 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ılar 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 kullanıcı kayıtlarını emülatöre özgü REST uç noktası ile temizleyin.

Taklit edilmiş telefon/SMS kimlik doğrulaması

Auth emülatörü, telefonla kimlik doğrulama için şunları 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.
  • 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 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ı 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, 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ışı her başlattığınızda kodun farklı olduğunu unutmayın.

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

  1. Doğrulama sürecini başlatmak için signInWithPhoneNumber adlı platformu arayın.
  2. Emülatöre özel 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 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.

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ı ile ilgili belgelere 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. Bir sonraki bölümde bu durumlarda bir alternatif açıklanmaktadı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. Ö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}'
));

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ı 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 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.

Emülasyonlu ö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. 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 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. 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. 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ıyla test telefon numaralarını 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.

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

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?