Apple platformlarında özel bir sağlayıcı ile Uygulama Kontrolünü etkinleştirin

Bu sayfa, özel Uygulama Kontrolü sağlayıcınızı kullanarak bir Apple uygulamasında Uygulama Kontrolünü nasıl etkinleştireceğinizi gösterir. Uygulama Kontrolü'nü etkinleştirdiğinizde, projenizin Firebase kaynaklarına yalnızca uygulamanızın erişebilmesini sağlamaya yardımcı olursunuz.

Uygulama Kontrolü'nü yerleşik sağlayıcılarla kullanmak istiyorsanız, Uygulama Onaylı Uygulama Kontrolü ve DeviceCheck ile Uygulama Kontrolü belgelerine bakın.

Sen başlamadan önce

1. Uygulama Kontrolü kitaplığını uygulamanıza ekleyin

  1. Uygulama Kontrolü bağımlılığını projenizin Podfile :

    pod 'FirebaseAppCheck'

    Veya alternatif olarak bunun yerine Swift Paket Yöneticisini kullanabilirsiniz.

    Ayrıca, bağlı olduğunuz tüm Firebase hizmet istemci kitaplıklarının en son sürümünü kullandığınızdan emin olun.

  2. pod install çalıştırın ve oluşturulan .xcworkspace dosyasını açın.

2. Uygulama Kontrolü protokollerini uygulayın

İlk olarak, AppCheckProvider ve AppCheckProviderFactory protokollerini uygulayan sınıflar oluşturmanız gerekir.

AppCheckProvider sınıfınız, özel Uygulama Kontrolü sağlayıcınızın özgünlük kanıtı olarak ihtiyaç duyduğu her türlü bilgiyi toplayan ve bir Uygulama Kontrolü belirteci karşılığında belirteç edinme hizmetinize gönderen bir getToken getToken(completion:) yöntemine sahip olmalıdır. Uygulama Kontrolü SDK'sı belirteç önbelleğe almayı işler, bu nedenle getToken(completion:) uygulamanızda her zaman yeni bir belirteç edinin.

Süratli

class YourCustomAppCheckProvider: NSObject, AppCheckProvider {
    var app: FirebaseApp

    init(withFirebaseApp app: FirebaseApp) {
        self.app = app
        super.init()
    }

    func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
        DispatchQueue.main.async {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Create AppCheckToken object.
            let exp = Date(timeIntervalSince1970: expirationFromServer)
            let token = AppCheckToken(
                token: tokenFromServer,
                expirationDate: exp
            )

            // Pass the token or error to the completion handler.
            handler(token, nil)
        }
    }
}

Amaç-C

@interface YourCustomAppCheckProvider : NSObject <FIRAppCheckProvider>

@property FIRApp *app;

- (id)initWithApp:(FIRApp *)app;

@end

@implementation YourCustomAppCheckProvider

- (id)initWithApp:app {
    self = [super init];
    if (self) {
        self.app = app;
    }
    return self;
}

- (void)getTokenWithCompletion:(nonnull void (^)(FIRAppCheckToken * _Nullable,
                                                 NSError * _Nullable))handler {
    dispatch_async(dispatch_get_main_queue(), ^{
        // Logic to exchange proof of authenticity for an App Check token.
        // ...

        // Create FIRAppCheckToken object.
        NSTimeInterval exp = expirationFromServer;
        FIRAppCheckToken *token
            = [[FIRAppCheckToken alloc] initWithToken:tokenFromServer
                                       expirationDate:[NSDate dateWithTimeIntervalSince1970:exp]];

        // Pass the token or error to the completion handler.
        handler(token, nil);
    });
}

@end

Ayrıca, AppCheckProvider uygulamanızın örneklerini oluşturan bir AppCheckProviderFactory sınıfı uygulayın:

Süratli

class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return YourCustomAppCheckProvider(withFirebaseApp: app)
  }
}

Amaç-C

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app {
    return [[YourCustomAppCheckProvider alloc] initWithApp:app];
}

@end

3. Uygulama Kontrolünü Başlatın

Uygulama temsilcinize veya uygulama başlatıcınıza aşağıdaki başlatma kodunu ekleyin:

Süratli

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

Amaç-C

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

Uygulama Kontrolü kitaplığı uygulamanıza yüklendikten sonra, güncellenen uygulamayı kullanıcılarınıza dağıtmaya başlayın.

Güncellenen istemci uygulaması, Firebase'e yaptığı her istekle birlikte Uygulama Kontrolü belirteçlerini göndermeye başlayacak, ancak Firebase ürünleri, Firebase konsolunun Uygulama Kontrolü bölümünde zorlamayı etkinleştirene kadar belirteçlerin geçerli olmasını gerektirmeyecek. Ayrıntılar için sonraki iki bölüme bakın.

4. İstek metriklerini izleyin

Güncellenen uygulamanız artık kullanıcıların elinde olduğuna göre, kullandığınız Firebase ürünleri için Uygulama Kontrolü'nün uygulanmasını etkinleştirebilirsiniz. Ancak bunu yapmadan önce, bunu yapmanın mevcut meşru kullanıcılarınızı kesintiye uğratmayacağından emin olmalısınız.

Gerçek Zamanlı Veritabanı, Bulut Firestore ve Bulut Depolama

Realtime Database, Cloud Firestore ve Cloud Storage için bu kararı vermek için kullanabileceğiniz önemli bir araç, Uygulama Kontrolü istek ölçümleri ekranıdır.

Bir ürün için Uygulama Kontrolü istek metriklerini görüntülemek için Firebase konsolunun Uygulama Kontrolü bölümünü açın. Örneğin:

Uygulama Kontrolü metrikleri sayfasının ekran görüntüsü

Her ürün için istek metrikleri dört kategoriye ayrılmıştır:

  • Doğrulanmış istekler, geçerli bir Uygulama Kontrolü belirtecine sahip isteklerdir. Uygulama Kontrolü zorlamasını etkinleştirdikten sonra yalnızca bu kategorideki istekler başarılı olur.

  • Güncel olmayan istemci istekleri, Uygulama Kontrolü belirtecinin eksik olduğu isteklerdir. Bu istekler, Uygulama Kontrolü uygulamaya dahil edilmeden önce Firebase SDK'nın daha eski bir sürümünden gelebilir.

  • Bilinmeyen kaynak istekleri, bir Uygulama Kontrolü belirtecinin eksik olduğu isteklerdir ve Firebase SDK'sından gelmemiş gibi görünürler. Bunlar, çalınan API anahtarlarıyla yapılan isteklerden veya Firebase SDK'sı olmadan yapılan sahte isteklerden olabilir.

  • Geçersiz istekler, uygulamanızın kimliğine bürünmeye çalışan orijinal olmayan bir istemciden veya öykünülmüş ortamlardan gelen geçersiz Uygulama Kontrolü belirtecine sahip isteklerdir.

Uygulamanız için bu kategorilerin dağılımı, yaptırımı etkinleştirmeye karar verdiğinizde bilgi vermelidir. İşte bazı yönergeler:

  • Son isteklerin neredeyse tamamı doğrulanmış istemcilerden geliyorsa, arka uç kaynaklarınızı korumaya başlamak için yaptırımı etkinleştirmeyi düşünün.

  • Son isteklerin önemli bir kısmı muhtemelen güncel olmayan istemcilerden geliyorsa, kullanıcıları rahatsız etmemek için yaptırımı etkinleştirmeden önce daha fazla kullanıcının uygulamanızı güncellemesini beklemeyi düşünün. Yayınlanan bir uygulamada Uygulama Kontrolü'nün zorunlu kılınması, Uygulama Kontrolü SDK'sı ile entegre olmayan önceki uygulama sürümlerini bozacaktır.

  • Uygulamanız henüz başlatılmadıysa, kullanımda olan herhangi bir eski istemci olmadığından Uygulama Kontrolü zorlamasını hemen etkinleştirmelisiniz.

Bulut İşlevleri

Cloud Functions için, işlevlerinizin günlüklerini inceleyerek Uygulama Kontrolü ölçümlerini alabilirsiniz. Çağrılabilir bir işlevin her çağrısı, aşağıdaki örnekte olduğu gibi yapılandırılmış bir günlük girişi yayar:

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

Aşağıdaki metrik filtresiyle günlük tabanlı bir sayaç metriği oluşturarak bu metrikleri Google Cloud Console'da analiz edebilirsiniz:

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

jsonPayload.verifications.appCheck alanını kullanarak metriği etiketleyin.

5. Zorlamayı etkinleştirin

Zorlamayı etkinleştirmek için her bir ürün için aşağıdaki talimatları izleyin. Bir ürün için yaptırımı etkinleştirdiğinizde, o ürüne yönelik tüm doğrulanmamış istekler reddedilir.

Gerçek Zamanlı Veritabanı, Bulut Firestore ve Bulut Depolama

Realtime Database, Cloud Firestore (iOS ve Android) ve Cloud Storage için zorlamayı etkinleştirmek için:

  1. Firebase konsolunun Uygulama Kontrolü bölümünü açın.

  2. Zorlamayı etkinleştirmek istediğiniz ürünün metrik görünümünü genişletin.

  3. Zorla'ya tıklayın ve seçiminizi onaylayın.

Zorunluluğu etkinleştirdikten sonra yürürlüğe girmesinin 15 dakika kadar sürebileceğini unutmayın.

Bulut İşlevleri

Bulut İşlevleri için Uygulama Kontrolü zorlamasını etkinleştirme bölümüne bakın.