Uygulamanızı Kimlik Doğrulama Emülatörüne bağlayın

Kimlik Doğrulama öykünücüsünü uygulamanızla kullanmadan önce, genel Firebase Local Emulator Suite iş akışını anladığınızdan ve Local Emulator Suite'i kurup yapılandırdığınızdan ve CLI komutlarını gözden geçirdiğinizden emin olun.

Bu konu, üretime yönelik Firebase Kimlik Doğrulama çözümleri geliştirmeye zaten aşina olduğunuzu varsaymaktadır. Gerekirse platform ve kimlik doğrulama tekniği kombinasyonunuza ilişkin belgeleri inceleyin.

Kimlik Doğrulama emülatörüyle ne yapabilirim?

Kimlik Doğrulama emülatörü, Firebase Authentication hizmetlerinin yüksek kaliteli yerel emülasyonunu sağlayarak, üretim Firebase Authentication'da bulunan işlevlerin çoğunu sağlar. Apple platformları, Android ve Web Firebase SDK'larıyla eşleştirilen emülatör şunları yapmanızı sağlar:

  • E-posta/şifre, telefon numarası/SMS, çok faktörlü SMS ve üçüncü taraf (örn. Google) kimlik sağlayıcı kimlik doğrulamasını test etmek için taklit kullanıcı hesapları oluşturun, güncelleyin ve yönetin
  • Taklit edilmiş kullanıcıları görüntüleyin ve düzenleyin
  • Prototip özel jeton kimlik doğrulama sistemleri
  • Emülatör Kullanıcı Arayüzü Günlükleri sekmesindeki kimlik doğrulamayla ilgili mesajları kontrol edin.

Bir Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesine yönelik ürünleri taklit eder.

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

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

Proje tipi Özellikler Emülatörlerle kullanın
Gerçek

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

Gerçek projelerde veritabanı örnekleri, depolama grupları, işlevler veya 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örler çalıştırabilirsiniz.

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

Demo

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

Demo projelerine ait 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, öykünücünün çalışmadığı bir kaynakla etkileşim kurmaya çalışırsa bu kod başarısız olur.

Mümkün olan her yerde demo projelerini kullanmanızı öneririz. Faydaları şunları içerir:

  • Emülatörleri Firebase projesi oluşturmadan çalıştırabileceğiniz için daha kolay kurulum
  • Kodunuzun yanlışlıkla öykünmemiş (üretim) kaynakları çağırması durumunda veri değişikliği, kullanım ve faturalandırma şansı olmayacağı için daha güçlü güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmenize gerek olmadığından daha iyi çevrimdışı destek.

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

Android, iOS ve web SDK'ları

Kimlik Doğrulama öykünücüsü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);
Süratli
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)

Web modular API

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

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

Web namespaced API

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

Kimlik Doğrulama ile Bulut İşlevleri veya Cloud Firestore veya Gerçek Zamanlı Veritabanı için Firebase Güvenlik Kuralları arasındaki etkileşimleri prototiplemek ve test etmek için ek kurulum gerekmez. Kimlik Doğrulama öykünücüsü yapılandırıldığında ve diğer öykünücüler çalışırken otomatik olarak birlikte çalışırlar.

Yönetici SDK'ları

Firebase Yönetici SDK'ları, FIREBASE_AUTH_EMULATOR_HOST ortam değişkeni ayarlandığında Kimlik Doğrulama öykünücüsüne otomatik olarak bağlanır.

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

Bulut İşlevleri öykünücüsünün, Kimlik Doğrulama öykünücüsünü otomatik olarak algıladığını ve dolayısıyla Bulut İşlevleri ile Kimlik Doğrulama öykünücüleri arasındaki entegrasyonları test ederken bu adımı atlayabileceğinizi unutmayın. Ortam değişkeni, Cloud Functions'ta Yönetici SDK'sı için otomatik olarak ayarlanacaktı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 öykünücüsü tarafından (sırasıyla verifyIdToken ve createSessionCookie yöntemleri aracılığıyla) yayınlanan imzasız Kimlik Belirteçlerini ve oturum çerezlerini kabul edecektir. Lütfen ortam değişkenini üretimde ayarlamadığınızdan emin olun.

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

Node.js Yönetici SDK'sı
admin.initializeApp({ projectId: "your-project-id" });
Çevre değişkeni
export GCLOUD_PROJECT="your-project-id"

Kimlik Jetonları

Güvenlik nedenleriyle Kimlik Doğrulama öykünücüsü, yalnızca diğer Firebase öykünücüleri veya yapılandırıldığında Firebase Yönetici SDK'sı tarafından kabul edilen imzasız kimlik belirteçleri yayınlar. Bu belirteçler, üretim Firebase hizmetleri veya üretim modunda çalışan Firebase Yönetici SDK'sı tarafından reddedilecektir (örneğin, yukarıda açıklanan kurulum adımları olmadan varsayılan davranış).

Emülatörü başlat

Kimlik Doğrulama emülatörünü, Emulator Suite kullanıcı arayüzü aracılığıyla etkileşimli olarak ve yerel REST arayüzü aracılığıyla etkileşimli olmayan bir şekilde kullanabilirsiniz. Aşağıdaki bölümler etkileşimli ve etkileşimli olmayan kullanım örneklerini kapsar.

Kimlik Doğrulama öykünücüsünü, REST arayüzünü ve Emulator Suite kullanıcı arayüzünü başlatmak için şunu çalıştırın:

firebase emulators:start

Anonim kimlik doğrulama için uygulamanız platformunuz ( iOS , Android , web ) için 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 kullanıcı arayüzünü kullanarak prototip oluşturmaya başlayabilirsiniz.

  1. Emulator Suite kullanıcı arayüzünde Kimlik Doğrulama sekmesine 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ı takip edin.

Oluşturulan bir test kullanıcısı ile uygulamanız, platformunuz ( iOS , Android , web ) için SDK mantığıyla kullanıcının oturumunu açıp 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 olayını 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"
  }
}

Parola sıfırlamalarını test etmek için emülatör, terminale newPassword parametresi (gerektiğinde değiştirebileceğiniz) 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 kullanıcı arayüzünü veya istemci kodunu kullanmak yerine, kullanıcı hesapları oluşturmak ve silmek için REST API'lerini çağıran ve emülatör e-posta doğrulamasını doldurmak için bant dışı e-posta doğrulama kodlarını getiren test kurulum komut dosyaları yazabilirsiniz. URL'si. Bu, platformu ve test kodunu ayrı tutar ve etkileşimli olmayan bir şekilde test yapmanıza olanak tanır.

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

  1. Kimlik Doğrulama kaydı REST uç noktasıyla kullanıcılar oluşturun.
  2. Testleri gerçekleştirmek için e-postaları 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 mevcut bant dışı e-posta doğrulama kodlarını alın.
  4. Verileri temizlemek için kullanıcı kayıtlarını emülatöre özel REST uç noktasıyla temizleyin.

Benzetilmiş telefon/SMS kimlik doğrulaması

Telefon kimlik doğrulaması için Kimlik Doğrulama öykünücüsü şunları desteklemez:

  • reCAPTCHA ve APN akışları. Emülatörle etkileşime girecek şekilde yapılandırıldıktan sonra istemci SDK'ları, entegrasyon testinde ( iOS , Android , web ) açıklanana benzer bir şekilde bu doğrulama yöntemlerini devre dışı bırakır.
  • Firebase konsolunda önceden yapılandırılmış kodlarla telefon numaralarını test edin.

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

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

  1. Emulator Suite kullanıcı arayüzünde Kimlik Doğrulama sekmesine 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ı takip edin.

Bununla birlikte, telefon kimlik doğrulama akışları için, bir operatörle iletişim kurmak kapsam dışında olduğundan ve yerel test için uygun olmadığından emülatör herhangi bir kısa mesajın teslimini tetiklemez! Bunun yerine emülatör, firebase emulators:start çalıştırdığınız terminale SMS yoluyla gönderilecek olan kodu yazdırır. Kullanıcıların kısa mesajlarını kontrol etmelerini simüle etmek için bu kodu uygulamaya girin.

Etkileşimli olmayan testler

Etkileşimli olmayan telefon kimlik doğrulama testi için, mevcut SMS kodlarını almak üzere Kimlik Doğrulama öykünücüsü REST API'yi kullanı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 platform signInWithPhoneNumber arayın.
  2. Emülatöre özel REST uç noktasını kullanarak doğrulama kodunu alın.
  3. Doğrulama koduyla her zamanki gibi confirmationResult.confirm(code) çağırın.

Çok faktörlü SMS

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

Emülatöre 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ını yapılandırabilirsiniz. Mesajlar, firebase emulators:start çalıştırdığınız terminale gönderilir ve REST arayüzünden edinilebilir.

Benzetilmiş üçüncü taraf kimlik sağlayıcısı (IDP) kimlik doğrulaması

Kimlik Doğrulama öykünücüsü, iOS, Android veya web uygulamalarınızdaki birçok üçüncü taraf kimlik doğrulama akışını, üretim kodunda hiçbir değişiklik olmadan test etmenize olanak tanır. Kimlik doğrulama akışı örnekleri için uygulamanızda kullanabileceğiniz çeşitli sağlayıcı ve platform kombinasyonlarına ilişkin belgelere bakın.

Genel olarak kimlik doğrulaması yapmak için Firebase SDK'yı iki yoldan biriyle kullanabilirsiniz:

  • Uygulamanız, SDK'nın kimlik bilgilerini almak için üçüncü taraf IDP sağlayıcılarıyla olan tüm etkileşimler de dahil olmak üzere tüm süreci uçtan uca yönetmesine olanak tanır.
  • Uygulamanız, ilgili tarafın SDK'sını kullanan bir üçüncü taraf sağlayıcıdan kimlik bilgilerini manuel olarak alır ve bu kimlik bilgilerini Kimlik Doğrulama SDK'sına iletir.

Yine yukarıdaki dokümantasyon bağlantısını kontrol edin ve kullanmak istediğiniz akış (Firebase SDK tarafından yönetilen veya manuel kimlik bilgisi alımı) hakkında bilgi sahibi olduğunuzdan emin olun. Kimlik Doğrulama öykünücüsü her iki yaklaşımın da test edilmesini destekler.

Firebase SDK odaklı IDP akışlarını test etme

Uygulamanız etkileşimli testler için Microsoft, GitHub veya Yahoo ile oturum açmak için OAuthProvider gibi herhangi bir Firebase SDK uçtan uca akışını kullanıyorsa Kimlik Doğrulama emülatörü, test etmenize yardımcı olmak için ilgili oturum açma sayfasının yerel bir sürümünü sunar. signinWithPopup veya signInWithRedirect yöntemini çağıran web uygulamalarından kimlik doğrulama. 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 ilerledikçe gerektiğinde sahte üçüncü taraf kullanıcı hesapları ve kimlik bilgileri oluşturur.

IDP akışlarını manuel kimlik bilgisi alımıyla test etme

"Manuel" oturum açma tekniklerini kullanırsanız ve signInWithCredentials yöntemini çağırırsanız, her zamanki gibi uygulamanız gerçek üçüncü taraf oturum açma talebinde bulunacak ve gerçek üçüncü taraf kimlik bilgilerini alacaktır.

Emülatörün yalnızca Google Sign-In, Apple ve JSON Web Belirteçleri (JWT'ler) olarak uygulanan kimlik belirteçlerini kullanan diğer sağlayıcılardan alınan kimlik bilgileri için signInWithCredential kimlik doğrulamasını desteklediğini unutmayın. Erişim belirteçleri (örneğin Facebook veya Twitter tarafından sağlanan ve JWT olmayanlar) desteklenmez. Bir sonraki bölümde bu durumlarda bir alternatif tartışılmaktadır.

Etkileşimli olmayan testler

Etkileşimli olmayan testlere yönelik bir yaklaşım, öykünücünün sunduğu 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 platformunuzdaki Espresso veya Xcode gibi kullanıcı arayüzü test araçlarını kullanın.

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

  1. Kodunuzun IDP'den idToken'ları alan kısmını yeniden düzenleyin veya yorumlayın; bu, testleriniz sırasında gerçek kullanıcı adlarını ve şifreleri girme ihtiyacını ortadan kaldırır ve testlerinizi IDP'deki API kotalarından ve hız sınırlarından kurtarır.
  2. İkinci olarak, signInWithCredential için belirtecin 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}'
));

Emülatörle birlikte kullanıldığında bu kod, Google'da foo@example.com e-posta adresine sahip bir kullanıcının kimliğini başarıyla doğrulayacaktır. Alt alanı, herhangi bir dizeyle değiştirilebilen, farklı kullanıcılarda oturum açmayla alay eden bir birincil anahtar olarak düşünün. firebase.auth.GoogleAuthProvider örneğin new firebase.auth.OAuthProvider('yahoo.com') veya taklit etmek istediğiniz başka bir sağlayıcı kimliğiyle değiştirebilirsiniz.

Benzetilmiş özel belirteç kimlik doğrulaması

Kimlik Doğrulama öykünücüsü, üretim Kimlik Doğrulaması belgelerinde açıklandığı gibi, desteklenen platformlarda signInWithCustomToken yöntemine yapılan çağrıları kullanarak özel JSON Web Belirteçleriyle kimlik doğrulamayı işler.

Kimlik Doğrulama öykünücüsü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 büyük ölçüde çoklu düzeylerde (cihaz, 3. taraf sağlayıcılar, Firebase vb.) güvenliğe dayandığından, öykünücünün tüm akışları düzgün bir şekilde yeniden oluşturması zordur.

Bulut IAM

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

Mobil platformlarda e-posta bağlantısıyla oturum açma işlemi Firebase Dinamik Bağlantılarına dayandığından, bu tür bağlantıların tümü bunun yerine (mobil) web platformunda açılacaktı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üvenli kimlik bilgilerine dayanır.

Google ve Apple gibi OpenID Connect sağlayıcılarından gelen gerçek kimlik bilgileri, Kimlik Doğrulama emülatörü tarafından kabul edilir. OpenID Connect sağlayıcısı olmayanları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 iletiyi kontrol ettiği ve oturum açma arayüzüne oturum açma kodunu girdiği eşzamansız bir işlemi içerir. Kimlik Doğrulama emülatörü herhangi bir e-posta veya SMS mesajı göndermez, ancak yukarıda açıklandığı gibi oturum açma kodları oluşturur ve bunları testte kullanılmak üzere terminale gönderir.

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

Özel belirteç kimlik doğrulaması

Kimlik Doğrulama öykünücüsü, özel belirteçlerin imzasını veya süresinin dolduğunu doğrulamaz. Bu, el yapımı jetonları kullanmanıza ve prototip oluşturma ve test senaryolarında jetonları süresiz olarak yeniden kullanmanıza olanak tanır.

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

Kimlik Doğrulama öykünücüsü, üretim hızı sınırlama veya kötüye kullanım önleme özelliklerini kopyalamaz.

Engelleme işlevleri

Üretimde kullanıcılar, beforeCreate ve beforeSignIn olayları tetiklendikten sonra depolamaya bir kez yazılır. Ancak, teknik sınırlamalar nedeniyle Kimlik Doğrulama öykünücüsü, biri kullanıcı oluşturulduktan sonra, diğeri oturum açıldıktan sonra olmak üzere depoya iki kez yazar. Bu, yeni kullanıcılar için, Kimlik Doğrulama öykünücüsünde beforeSignIn getAuth().getUser() başarıyla çağırabileceğiniz, ancak üretim sırasında bunu yaparken bir hatayla karşılaşacağınız anlamına gelir.

Sırada ne var?