1. Giriş
Firebase Uygulama Kontrolü, isteklerin yasal uygulamalardan ve cihazlardan geldiğinden emin olarak arka uç kaynaklarınızın fatura sahtekarlığı ve kimlik avı gibi kötüye kullanımlardan korunmasına yardımcı olur. Kaynaklarınızı güvende tutmak için hem Firebase hizmetleriyle hem de kendi arka uç hizmetlerinizle birlikte çalışır.
Firebase belgelerinde Firebase Uygulama Kontrolü hakkında daha fazla bilgi edinebilirsiniz.
Uygulama Kontrolü, bir uygulamanın ve/veya cihazın bütünlüğünü doğrulamak için platforma özel hizmetleri kullanır. Bu hizmetlere doğrulama sağlayıcıları denir. Böyle bir sağlayıcı, App Check'in Apple uygulamalarının ve cihazlarının orijinalliğini doğrulamak için kullanabileceği Apple'ın App Attest hizmetidir.
Ne inşa edeceksin
Bu codelab'de, projenin Gerçek Zamanlı Veritabanının yasal olmayan uygulamalar ve cihazlar tarafından erişilmesini önlemek için mevcut bir örnek uygulamaya Uygulama Denetimi ekleyecek ve uygulayacaksınız.
Ne öğreneceksin
- Firebase Uygulama Kontrolü mevcut bir uygulamaya nasıl eklenir?
- Farklı Firebase Uygulama Kontrolü doğrulama sağlayıcıları nasıl yüklenir?
- Uygulamanız için Uygulama Onayı nasıl yapılandırılır?
- Uygulama geliştirme sırasında uygulamanızı Simülatörlerde test etmek için hata ayıklama kanıt sağlayıcısını nasıl yapılandırabilirsiniz?
İhtiyacınız olan şey
- Xcode 13.3.1 veya üzeri
- Yeni uygulama tanımlayıcıları oluşturmanıza olanak tanıyan bir Apple Geliştirici hesabı
- App Attest'i destekleyen bir iOS/ıpados cihazı ( App Attest API'nin kullanılabilirliği hakkında bilgi edinin)
2. Başlangıç projesini edinin
iOS için Firebase Hızlı Başlangıç deposu, farklı Firebase ürünlerini göstermeye yönelik örnek uygulamalar içerir. Bu codelab'in temeli olarak SwiftUI için Firebase Database Quickstart uygulamasını kullanacaksınız.
iOS için Firebase Quickstarts deposunu komut satırından kopyalayın:
git clone https://github.com/firebase/quickstart-ios.git cd quickstart-ios
Gerçek Zamanlı Veritabanı SwiftUI Quickstart uygulama projesini Xcode'da açın:
cd database/DatabaseExampleSwiftUI/DatabaseExample xed .
3. Uygulamanıza Uygulama Kontrolü ekleyin
- Swift Paket Yöneticisinin projenin bağımlılıklarını çözmesini bekleyin.
-
DatabaseExample (iOS)
uygulama hedefinin Genel sekmesini açın. Ardından Çerçeveler, Kitaplıklar ve Gömülü İçerik bölümünde + düğmesini tıklayın. -
FirebaseAppCheck
eklemek için seçin.
4. Uygulama Kontrolü sağlayıcı fabrikasını oluşturun ve yükleyin
-
Shared
dosya grubunaAppCheck
adlı yeni bir grup ekleyin. - Bu grubun içinde ayrı bir dosyada bir fabrika sınıfı oluşturun, örneğin
MyAppCheckProviderFactory.swift
ve onuDatabaseExample (iOS)
hedefine eklediğinizden emin olun:import Firebase class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { #if targetEnvironment(simulator) // App Attest is not available on simulators. // Use a debug provider. return AppCheckDebugProvider(app: app) #else // Use App Attest provider on real devices. return AppAttestProvider(app: app) #endif } }
- Ardından,
DatabaseExampleApp.swift
dosyasındaFirebaseAppCheck
içe aktardığınızdan emin olun veMyAppCheckProviderFactory
sınıfının bir örneğini Uygulama Denetimi sağlayıcı fabrikası olarak ayarlayın.import SwiftUI import FirebaseCore import FirebaseAppCheck @main struct DatabaseExampleApp: App { init() { // Set an instance of MyAppCheckProviderFactory as an App Check // provider factory before configuring Firebase. AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory()) FirebaseApp.configure() } ... }
5. Firebase projesi oluşturun ve yapılandırın
iOS projenizde Uygulama Kontrolü'nü kullanmak için Firebase konsolunda şu adımları uygulamanız gerekir:
- Bir Firebase projesi oluşturun.
- iOS uygulamanızı Firebase projesine ekleyin.
- Firebase Kimlik Doğrulamasını yapılandırın.
- Koruyacağınız Gerçek Zamanlı Veritabanı örneğini başlatın.
- Uygulama Kontrolü'nü yapılandırın.
Proje oluştur
Öncelikle Firebase projesi oluşturmanız gerekiyor.
- Firebase konsolunda Proje ekle'yi seçin.
- Projenize
App Check Codelab
adını verin - Devam'ı tıklayın.
- Bu proje için Google Analytics'i devre dışı bırakın ve ardından Proje oluştur'a tıklayın.
Gerçek Zamanlı Veritabanı Örneği Oluşturun
Şimdi Firebase konsolunun Gerçek Zamanlı Veritabanı bölümüne gidin.
- Veritabanı oluşturma iş akışını başlatmak için Veritabanı Oluştur düğmesine tıklayın.
- Veritabanının varsayılan konumunu (
us-central1
) değiştirmeden bırakın ve İleri'ye tıklayın. - Kilitli Modun seçildiğinden emin olun ve veritabanınız için Güvenlik Kurallarını etkinleştirmek için Etkinleştir düğmesine tıklayın.
- Gerçek Zamanlı Veritabanı tarayıcısının Kurallar sekmesine gidin ve varsayılan kuralları aşağıdakiyle değiştirin:
{ "rules": { // User profiles are only readable/writable by the user who owns it "users": { "$UID": { ".read": "auth.uid == $UID", ".write": "auth.uid == $UID" } }, // Posts can be read by anyone but only written by logged-in users. "posts": { ".read": true, ".write": "auth.uid != null", "$POSTID": { // UID must match logged in user and is fixed once set "uid": { ".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid" }, // User can only update own stars "stars": { "$UID": { ".validate": "auth.uid == $UID" } } } }, // User posts can be read by anyone but only written by the user that owns it, // and with a matching UID "user-posts": { ".read": true, "$UID": { "$POSTID": { ".write": "auth.uid == $UID", ".validate": "data.exists() || newData.child('uid').val() == auth.uid" } } }, // Comments can be read by anyone but only written by a logged in user "post-comments": { ".read": true, ".write": "auth.uid != null", "$POSTID": { "$COMMENTID": { // UID must match logged in user and is fixed once set "uid": { ".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid" } } } } } }
- Güncellenen Güvenlik Kurallarını etkinleştirmek için Yayınla düğmesini tıklayın.
iOS Uygulamanızı Firebase'e bağlanacak şekilde hazırlayın
Örnek uygulamayı fiziksel bir cihazda çalıştırabilmek için projeyi geliştirme ekibinize eklemeniz gerekir; böylece Xcode, gerekli ön hazırlık profilini sizin için yönetebilir. Örnek uygulamayı geliştirici hesabınıza eklemek için şu adımları izleyin:
- Xcode'da proje gezgininde
DatabaseExample
projesini seçin. -
DatabaseExample (iOS)
hedefini seçin ve İmzalama ve Yetenekler sekmesini açın. - "Veritabanı Örneği (iOS) için imza atmak bir geliştirme ekibi gerektirir" şeklinde bir hata mesajı görmelisiniz.
- Paket tanımlayıcısını benzersiz bir tanımlayıcıyla güncelleyin. Bunu başarmanın en kolay yolu web sitenizin ters alan adını kullanmaktır; örneğin
com.acme.samples.firebase.quickstart.DatabaseExample
(lütfen bu kimliği kullanmayın; bunun yerine kendi benzersiz kimliğinizi seçin). - Geliştirme ekibinizi seçin.
- Xcode, "Temel Hazırlık Profili: Xcode Yönetilen Profil"i ve bu etiketin yanında küçük bir bilgi simgesini görüntülediğinde her şeyin yolunda gittiğini anlayacaksınız. Bu simgeye tıklamak, ön hazırlık profili hakkında daha fazla ayrıntı görüntüleyecektir.
iOS Uygulamanızı bağlayın
Uygulamanızı bağlama konusunda ayrıntılı bir açıklama için Firebase'i iOS projenize eklemeyle ilgili belgelere göz atın. Başlamak için Firebase konsolunda şu ana adımları izleyin:
- Firebase projenize yeni bir iOS uygulaması eklemek için, yeni projenizin Projeye Genel Bakış ekranından + Uygulama ekle düğmesine tıklayın ve ardından iOS+ simgesine tıklayın.
- Uygulamanızın paket kimliğini girin (önceki bölümde
com.acme.samples.firebase.quickstart.DatabaseExample
gibi tanımladığınız kimliği kullanın; bunun benzersiz bir tanımlayıcı olması gerektiğini unutmayın) - Uygulamayı Kaydet'i tıklayın.
- Firebase, uygulamanız için gerekli tüm Firebase meta verilerini içeren bir
GoogleService-Info.plist
dosyası oluşturur. - Dosyayı indirmek için GoogleService-Info.plist'i İndir'i tıklayın.
- Xcode'da projenin zaten
GoogleService-Info.plist
adında bir dosya içerdiğini göreceksiniz. Önce bu dosyayı silin; bir sonraki adımda onu kendi Firebase projenize ait dosyayla değiştireceksiniz. - Önceki adımda indirdiğiniz
GoogleService-Info.plist
dosyasını Xcode projenizin kök klasörüne kopyalayın veGoogleService-Info.plist
olarak adlandırıldığından emin olarakDatabaseExample (iOS)
hedefine ekleyin. - Kayıt akışının kalan adımlarını tıklayın. Örnek proje zaten doğru şekilde ayarlandığından kodda herhangi bir değişiklik yapmanıza gerek yoktur.
Firebase Kimlik Doğrulamasını Yapılandırma
Vay be! Şu ana kadar oldukça fazla hazırlık yapıldı ama sıkı tutunun! Firebase'de yeniyseniz, yakında aşina olacağınız bir iş akışının önemli kısımlarını görmüşsünüzdür.
Şimdi bu uygulama için Firebase Kimlik Doğrulamasını yapılandıracaksınız.
Kimlik Doğrulama E-postasını/Parolasını Etkinleştir Oturum açma sağlayıcısı
- Halen Firebase konsolundayken konsolun Kimlik Doğrulama bölümünü açın.
- Projeniz için Firebase Authentication'ı ayarlamak üzere Başlayın'ı tıklayın.
- Oturum açma yöntemi sekmesini seçin.
- Yerel sağlayıcılar bölümünde E-posta/Şifre'yi seçin.
- E-postayı/Parolayı etkinleştirin ve Kaydet'e tıklayın.
Test kullanıcısı ekleme
- Kimlik Doğrulama bölümünün Kullanıcılar sekmesini açın.
- Kullanıcı ekle'yi tıklayın.
- Test kullanıcınız için bir e-posta ve şifre belirtin, ardından Kullanıcı ekle 'yi tıklayın.
Uygulamayı bir tur atın
Xcode'a geri dönün ve uygulamayı iOS Simulator'da çalıştırın. Yeni oluşturduğunuz test kullanıcısının e-posta adresi ve şifresiyle oturum açın. Oturum açtıktan sonra bir gönderi oluşturun, mevcut bir gönderiye yorum gönderin ve gönderilere yıldız ekleyin/yıldızlarını kaldırın.
6. Bir Uygulama Onaylama sağlayıcısını yapılandırın
Bu adımda, Uygulama Kontrolü'nü Firebase konsolundaki Uygulama Onay sağlayıcısını kullanacak şekilde yapılandıracaksınız.
- Firebase konsolunda konsolun Uygulama Kontrolü bölümüne gidin.
- Başlayın'ı tıklayın.
- Uygulamalar sekmesinde ayrıntılarını genişletmek için uygulamanıza tıklayın.
- Uygulama Onayını yapılandırmak için Uygulama Onayını tıklayın, ardından Apple Geliştirici Hesabınızın Ekip Kimliğini girin (bunu Apple Geliştirici portalındaki Üyelik bölümünde bulabilirsiniz):
- Kaydet'i tıklayın.
Bununla, yeni uygulamamıza bağlı, çalışan bir Firebase projeniz olur ve Uygulama Kontrolü etkinleştirilir.
Artık özel doğrulama hizmetimizi yapılandırmaya hazırsınız! Bu iş akışı hakkında daha fazla bilgi için bkz. iOS'ta Uygulama Onayıyla Uygulama Denetimini Etkinleştirme .
7. Uygulamanız için Uygulama Onayını yapılandırın
Artık Firebase Uygulama Kontrolü SDK'sına el atma ve bazı istemci kodlarını uygulama zamanı.
Öncelikle Xcode projesini, uygulamanızdan gönderilen isteklerin uygulamanızın meşru örneklerinden geldiğinden emin olmak için SDK'nın Apple'ın Uygulama Onay API'sini kullanabileceği şekilde yapılandırmanız gerekir.
- Uygulama hedefiniz için Uygulama Onay özelliğini Xcode projesine ekleyin:
- uygulama hedef ayarlarınızda İmzalama ve Yetenekler sekmesini açın
- " + " düğmesine tıklayın
- iletişim kutusunda Uygulama Onaylama özelliğini bulun ve seçin
- Önceki adımı gerçekleştirdikten sonra Xcode projenizin kök klasöründe
DatabaseExample (iOS).entitlements
dosyası görünecektir. -
DatabaseExample (iOS).entitlements
dosyasında,App Attest Environment
anahtarının değeriniproduction.
Bu adımları tamamladıktan ve uygulamayı fiziksel bir iOS cihazında (iPhone/iPad) başlattığınızda, uygulama yine de Gerçek Zamanlı Veritabanına erişebilecektir. Daha sonraki bir adımda, yasal olmayan uygulamalardan ve cihazlardan gönderilen istekleri engelleyecek Uygulama Kontrolü'nü zorunlu kılacaksınız.
Bu iş akışı hakkında daha fazla bilgi edinmek için bkz. iOS'ta Uygulama Onayıyla Uygulama Denetimini Etkinleştirme .
8. iOS Simülatörü için Hata Ayıklama Onay Sağlayıcısını Yapılandırma
Firebase Uygulama Kontrolü Hata Ayıklama sağlayıcısı, geliştirme süreci sırasında iOS Simülatörü de dahil olmak üzere güvenilmeyen ortamlarda Firebase Uygulama Kontrolü uygulamasıyla uygulamaların test edilmesini mümkün kılar. Daha sonra hata ayıklama sağlayıcısını birlikte yapılandırmanız gerekir.
Firebase hata ayıklama sağlayıcısını uygulamanıza yükleyin
Seçenek 1: Fabrikanızda koşullu olarak hata ayıklama sağlayıcısının bir örneğini oluşturun
Bunların çoğunu Uygulama Kontrolü sağlayıcı fabrikasını oluşturduğunuzda yaptınız. Bu adımda, hata ayıklama sağlayıcısı tarafından oluşturulan yerel hata ayıklama sırrının günlüğünü ekleyeceksiniz, böylece uygulamanın bu örneğini hata ayıklama amacıyla Firebase konsoluna kaydedebilirsiniz.
MyAppCheckProviderFactory.swift
aşağıdaki kodla güncelleyin:
import Firebase
class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
#if targetEnvironment(simulator)
// App Attest is not available on simulators.
// Use a debug provider.
let provider = AppCheckDebugProvider(app: app)
// Print only locally generated token to avoid a valid token leak on CI.
print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")
return provider
#else
// Use App Attest provider on real devices.
return AppAttestProvider(app: app)
#endif
}
}
Bu yaklaşım, ortama bağlı olarak Uygulama Kontrolü'nü yapılandırma konusunda bize daha fazla esneklik sağlıyor. Örneğin, App Attest'in kullanılamadığı işletim sistemi sürümlerinde DeviceCheck gibi diğer doğrulama sağlayıcılarını veya özel bir doğrulama sağlayıcısını kullanabilirsiniz. Aşağıdaki bir örneğe bakın:
import Firebase
class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
#if targetEnvironment(simulator)
// App Attest is not available on simulators.
// Use a debug provider.
let provider = AppCheckDebugProvider(app: app)
// Print only locally generated token to avoid a valid token leak on CI.
print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")
return provider
#else
if #available(iOS 14.0, *) {
// Use App Attest provider on real devices.
return AppAttestProvider(app: app)
} else {
return DeviceCheckProvider(app: app)
}
#endif
}
}
Seçenek 2: AppCheckDebugProviderFactory
yükleyin
Daha basit durumlarda, Firebase uygulama örneğini yapılandırmadan önce AppCheckDebugProviderFactory
geçici veya koşullu olarak yükleyebilirsiniz:
init() {
#if targetEnvironment(simulator)
let providerFactory = AppCheckDebugProviderFactory()
#else
let providerFactory = MyAppCheckProviderFactory()
#endif
AppCheck.setAppCheckProviderFactory(providerFactory)
FirebaseApp.configure()
}
Bu, kendi Uygulama Kontrolü sağlayıcı fabrikanızı oluştururken birkaç satır koddan tasarruf etmenizi sağlayacaktır.
Hata ayıklama sırrınızı Firebase konsoluna kaydedin
iOS Simülatörünüzden hata ayıklama sırrını alın
-
AppCheckDebugProviderFactory
(yukarıdaki 2. seçenek) yüklemeyi seçtiyseniz, uygulama başlatma bağımsız değişkenlerine-FIRDebugEnabled
ekleyerek uygulamanız için hata ayıklama günlüğünü etkinleştirmeniz gerekir: - Uygulamanızı bir Simülatörde çalıştırın
- Xcode konsolunda hata ayıklama sırrını bulun. Daha hızlı bulmak için konsol filtresini kullanabilirsiniz:
Not: Hata ayıklama sırrı, simülatörünüz için ilk uygulama başlatıldığında oluşturulur ve kullanıcı varsayılanlarında saklanır. Uygulamayı kaldırırsanız, simülatörü sıfırlarsanız veya başka bir simülatör kullanırsanız yeni bir hata ayıklama sırrı oluşturulacaktır. Yeni hata ayıklama sırrını kaydettiğinizden emin olun.
Hata ayıklama sırrını kaydedin
- Firevbase konsoluna geri döndüğünüzde Uygulama Kontrolü bölümüne gidin.
- Uygulamalar sekmesinde ayrıntılarını genişletmek için uygulamanıza tıklayın.
- Taşma menüsünde Hata ayıklama belirteçlerini yönet'i seçin:
- Xcode konsolundan kopyaladığınız sırrı ekleyin ve ardından Kaydet'e tıklayın.
Bu adımlardan sonra, Uygulama Kontrolü zorunlu olsa bile Simülatördeki uygulamayı kullanabilirsiniz.
Not: Hata ayıklama sağlayıcısı, özellikle hata ayıklama gizli sızıntılarının önlenmesine yardımcı olmak için tasarlanmıştır. Mevcut yaklaşımla hata ayıklama sırrını kaynak kodunuzda saklamanıza gerek yoktur.
Bu akışla ilgili daha fazla ayrıntıyı belgelerde bulabilirsiniz - bkz. iOS'ta hata ayıklama sağlayıcısıyla Uygulama Denetimini Kullanma .
9. Firebase Gerçek Zamanlı Veritabanı için Uygulama Kontrolü uygulamasını etkinleştirin
Şimdilik uygulamamız, gerçek cihazlar için bir AppAttestProvider
döndüren bir AppCheckProviderFactory
bildirmektedir. Uygulamanız fiziksel bir cihazda çalışırken doğrulamayı gerçekleştirecek ve sonuçları Firebase arka ucuna gönderecektir. Ancak Firebase arka ucu yine de herhangi bir cihazdan, iOS Simülatöründen, komut dosyasından vb. gelen istekleri kabul eder. Bu mod, Uygulama Kontrolü olmayan uygulamanızın eski bir sürümüne sahip kullanıcılarınız varsa ve erişimi zorlamak istemiyorsanız kullanışlıdır. henüz kontrol ediyor.
Artık Firebase uygulamasına yalnızca meşru cihazlardan erişilebildiğinden emin olmak için Uygulama Kontrolü uygulamasını etkinleştirmeniz gerekiyor. Uygulama Kontrolü entegrasyonu olmayan eski uygulama sürümleri, Firebase projesi için yaptırımı etkinleştirdiğinizde çalışmayı durduracaktır.
- Firebase konsolunun Uygulama Kontrolü bölümünde, ayrıntılarını genişletmek için Gerçek Zamanlı Veritabanı'na tıklayın.
- Zorunlu kıl'ı tıklayın.
- Onay iletişim kutusundaki bilgileri okuyun ve ardından Uygula öğesine tıklayın.
Bu adımları tamamladıktan sonra yalnızca meşru uygulamalar veritabanına erişebilecektir. Diğer tüm uygulamalar engellenecektir.
Gerçek Zamanlı Veritabanına yasal olmayan bir uygulamayla erişmeyi deneyin
Uygulama Kontrolü yaptırımını çalışırken görmek için şu adımları izleyin:
-
DatabaseExampleApp
içindeki uygulama giriş noktanızıninit
yöntemindeki Uygulama Kontrolü kayıt kodunu yorumlayarak Uygulama Kontrolü kaydını kapatın. - Cihaz > Tüm İçeriği ve Ayarları Sil öğesini seçerek Simülatörü sıfırlayın. Bu, Simülatörü silecektir (ve cihaz belirtecini geçersiz kılacaktır).
- Uygulamayı Simülatörde tekrar çalıştırın.
- Şimdi aşağıdaki hata mesajını görmelisiniz:
[FirebaseDatabase][I-RDB034005] Firebase Database connection was forcefully killed by the server. Will not attempt reconnect. Reason: Invalid appcheck token.
Uygulama Kontrolü'nü yeniden etkinleştirmek için aşağıdakileri yapın:
-
DatabaseExampleApp
içindeki Uygulama Denetimi kayıt kodunun yorumunu kaldırın. - Uygulamayı yeniden başlatın.
- Xcode'un konsolundaki yeni Uygulama Kontrolü jetonunu not edin.
- Hata ayıklama jetonunu Firebase konsolundaki uygulamanızın Uygulama Kontrolü ayarlarına kaydedin.
- Uygulamayı yeniden çalıştırın.
- Artık bir hata mesajı görmemelisiniz ve uygulamaya yeni gönderiler ve yorumlar ekleyebilmelisiniz.
10. Tebrikler!
Artık nasıl yapılacağını biliyorsunuz:
- Mevcut bir projeye Uygulama Kontrolü ekleme
- Uygulamanızın üretim sürümü için bir Uygulama Onay doğrulama sağlayıcısı yapılandırma
- Uygulamanızı bir simülatörde test etmek için bir hata ayıklama doğrulama sağlayıcısı yapılandırın
- Firebase projenizde Uygulama Kontrolü'nü ne zaman zorunlu kılacağınızı öğrenmek için uygulama sürümünün kullanıma sunulmasını inceleyin
- Uygulama Kontrolü yaptırımını etkinleştir
Sonraki adımlar
Firebase Remote Config kod laboratuvarını kullanarak Firebase Uygulama Kontrolünü kademeli olarak kullanıma sunma bölümünde, Uygulama Kontrolü'nü kullanıcılarınıza kademeli olarak sunmak için Remote Config'i nasıl kullanacağınızı öğrenin.
Bunlar yararlı bulabileceğiniz diğer kaynaklardır
Bu codelab'de açıklanan kurulum çoğu durumda işe yarayacaktır, ancak Uygulama Kontrolü gerektiğinde size daha fazla esneklik sağlar; daha fazla ayrıntı için aşağıdaki bağlantılara göz atın: