Apple 플랫폼에서 사용자 지정 공급자를 사용하여 앱 확인 활성화

이 페이지에서는 맞춤형 App Check 제공자를 사용하여 Apple 앱에서 App Check를 활성화하는 방법을 보여줍니다. 앱 확인을 활성화하면 앱만 프로젝트의 Firebase 리소스에 액세스할 수 있도록 할 수 있습니다.

기본 제공 공급자와 함께 앱 확인을 사용하려면 앱 증명을 사용한 앱 확인 및 DeviceCheck를 사용한 앱 확인에 대한 문서를 참조하세요.

시작하기 전에

1. 앱에 App Check 라이브러리 추가

  1. 프로젝트의 Podfile 에 App Check에 대한 종속성을 추가합니다.

    pod 'FirebaseAppCheck'

    또는 대신 Swift 패키지 관리자 를 사용할 수 있습니다.

    또한 의존하는 Firebase 서비스 클라이언트 라이브러리의 최신 버전을 사용하고 있는지 확인하세요.

  2. pod install 을 실행하고 생성된 .xcworkspace 파일을 엽니다.

2. 앱 체크 프로토콜 구현

먼저 AppCheckProviderAppCheckProviderFactory 프로토콜을 구현하는 클래스를 만들어야 합니다.

AppCheckProvider 클래스에는 사용자 지정 App Check 공급자가 진위 증명으로 요구하는 모든 정보를 수집하고 App Check 토큰과 교환하여 토큰 획득 서비스로 보내는 getToken(completion:) 메서드가 있어야 합니다. App Check SDK는 토큰 캐싱을 처리하므로 getToken(completion:) 구현에서 항상 새 토큰을 가져옵니다.

빠른

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)
        }
    }
}

오브젝티브-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

또한 AppCheckProvider 구현의 인스턴스를 생성하는 AppCheckProviderFactory 클래스를 구현합니다.

빠른

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

오브젝티브-C

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

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

@end

3. 앱 체크 초기화

앱 대리자 또는 앱 이니셜라이저에 다음 초기화 코드를 추가합니다.

빠른

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

FirebaseApp.configure()

오브젝티브-C

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

[FIRApp configure];

앱 체크 라이브러리가 앱에 설치되면 업데이트된 앱을 사용자에게 배포하기 시작합니다.

업데이트된 클라이언트 앱은 Firebase에 대한 모든 요청과 함께 App Check 토큰을 보내기 시작하지만 Firebase 콘솔의 App Check 섹션에서 시행을 활성화할 때까지 Firebase 제품에서 토큰이 유효할 것을 요구하지 않습니다. 자세한 내용은 다음 두 섹션을 참조하십시오.

4. 요청 메트릭 모니터링

업데이트된 앱이 사용자에게 제공되었으므로 사용하는 Firebase 제품에 대해 App Check 시행을 활성화할 수 있습니다. 그러나 그렇게 하기 전에 그렇게 하는 것이 기존의 합법적인 사용자를 방해하지 않는지 확인해야 합니다.

실시간 데이터베이스, Cloud Firestore 및 Cloud Storage

실시간 데이터베이스, Cloud Firestore 및 Cloud Storage에 대해 이러한 결정을 내리는 데 사용할 수 있는 중요한 도구는 앱 확인 요청 메트릭 화면입니다.

제품에 대한 App Check 요청 측정항목을 보려면 Firebase 콘솔의 App Check 섹션을 엽니다. 예를 들어:

App Check 측정항목 페이지의 스크린샷

각 제품에 대한 요청 메트릭은 네 가지 범주로 나뉩니다.

  • 확인된 요청은 유효한 App Check 토큰이 있는 요청입니다. 앱 검사 시행을 활성화한 후에는 이 범주의 요청만 성공합니다.

  • 오래된 클라이언트 요청은 App Check 토큰이 누락된 요청입니다. 이러한 요청은 App Check가 앱에 포함되기 전에 Firebase SDK의 이전 버전에서 발생한 것일 수 있습니다.

  • 알 수 없는 출처 요청은 App Check 토큰이 없고 Firebase SDK에서 온 것 같지 않은 요청입니다. 이는 도난당한 API 키로 이루어진 요청 또는 Firebase SDK 없이 이루어진 위조된 요청에서 비롯된 것일 수 있습니다.

  • 잘못된 요청은 잘못된 앱 확인 토큰이 있는 요청으로, 앱을 가장하려고 시도하는 인증되지 않은 클라이언트나 에뮬레이트된 환경에서 발생할 수 있습니다.

앱에 대한 이러한 범주의 배포는 시행을 활성화하기로 결정할 때 알려야 합니다. 다음은 몇 가지 지침입니다.

  • 최근 요청이 거의 모두 확인된 클라이언트에서 온 경우 적용을 활성화하여 백엔드 리소스 보호를 시작하는 것이 좋습니다.

  • 최근 요청의 상당 부분이 오래된 클라이언트에서 온 것이라면 사용자를 방해하지 않으려면 시행을 활성화하기 전에 더 많은 사용자가 앱을 업데이트할 때까지 기다리는 것이 좋습니다. 출시된 앱에 App Check를 적용하면 App Check SDK와 통합되지 않은 이전 앱 버전이 중단됩니다.

  • 앱이 아직 실행되지 않은 경우 사용 중인 오래된 클라이언트가 없기 때문에 즉시 App Check 시행을 활성화해야 합니다.

클라우드 함수

Cloud Functions의 경우 함수의 로그를 검사하여 App Check 측정항목을 가져올 수 있습니다. 호출 가능한 함수를 호출할 때마다 다음 예와 같은 구조화된 로그 항목이 생성됩니다.

{
  "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
    }
  }
}

다음 측정항목 필터 로 로그 기반 카운터 측정항목을 만들어 Google Cloud Console에서 이러한 측정항목을 분석할 수 있습니다.

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 필드를 사용 하여 지표에 레이블 을 지정합니다.

5. 시행 활성화

시행을 활성화하려면 아래의 각 제품에 대한 지침을 따르세요. 제품에 대한 시행을 활성화하면 해당 제품에 대한 확인되지 않은 모든 요청이 거부됩니다.

실시간 데이터베이스, Cloud Firestore 및 Cloud Storage

실시간 데이터베이스, Cloud Firestore(iOS 및 Android), Cloud Storage에 대한 시행을 활성화하려면:

  1. Firebase 콘솔의 앱 확인 섹션을 엽니다.

  2. 시행을 활성화하려는 제품의 메트릭 보기를 확장합니다.

  3. 시행 을 클릭하고 선택 사항을 확인합니다.

시행을 활성화한 후 적용되는 데 최대 15분이 소요될 수 있습니다.

클라우드 함수

Cloud Functions에 대한 앱 검사 시행 활성화를 참조하십시오.