Apple 플랫폼에서 앱 체크로 Firebase 외의 리소스 보호

자체 호스팅 백엔드와 같이 앱의 Firebase 외의 리소스(예: 자체 호스팅 백엔드)를 App Check를 사용합니다. 이렇게 하려면 다음 두 가지 작업을 모두 수행해야 합니다.

  • 각 요청과 함께 App Check 토큰을 전송하도록 앱 클라이언트를 수정합니다. 이 페이지에 설명된 대로 백엔드에 연결됩니다
  • 모든 요청에 유효한 App Check 토큰을 요구하도록 백엔드를 수정합니다. 커스텀 백엔드에서 App Check 토큰 확인에 설명된 대로 토큰을 검증할 수 있습니다.

시작하기 전에

App Attest 또는App Check DeviceCheck 또는 커스텀 제공자가 있습니다.

백엔드 요청으로 App Check 토큰 전송

백엔드 요청에 만료되지 않은 유효한 App Check 토큰이 포함되도록 하려면 AppCheck.token() 호출에서 각 요청을 래핑합니다. App Check 라이브러리 필요한 경우 토큰을 새로고침하며 메서드의 완료 블록에서 호출할 수 있습니다.

유효한 토큰이 있으면 요청과 함께 백엔드에 전송합니다. 이 이 작업을 수행하는 방법에 대한 구체적인 내용은 귀하에게 달려 있지만 App Check 토큰(쿼리 매개변수 포함)은 다음과 같습니다. 우발적인 유출과 가로채기에 취약해집니다. 다음 예시에서는 권장되는 방식인 커스텀 HTTP 헤더에서 토큰을 전송합니다.

Swift

do {
  let token = try await AppCheck.appCheck().token(forcingRefresh: false)

  // Get the raw App Check token string.
  let tokenString = token.token

  // Include the App Check token with requests to your server.
  let url = URL(string: "https://yourbackend.example.com/yourApiEndpoint")!
  var request = URLRequest(url: url)
  request.httpMethod = "GET"
  request.setValue(tokenString, forHTTPHeaderField: "X-Firebase-AppCheck")

  let task = URLSession.shared.dataTask(with: request) { data, response, error in
      // Handle response from your backend.
  }
  task.resume()
} catch(let error) {
  print("Unable to retrieve App Check token: \(error)")
  return
}

Objective-C

[[FIRAppCheck appCheck] tokenForcingRefresh:NO
                                 completion:^(FIRAppCheckToken * _Nullable token,
                                              NSError * _Nullable error) {
    if (error != nil) {
        // Handle any errors if the token was not retrieved.
        NSLog(@"Unable to retrieve App Check token: %@", error);
        return;
    }
    if (token == nil) {
        NSLog(@"Unable to retrieve App Check token.");
        return;
    }

    // Get the raw App Check token string.
    NSString *tokenString = token.token;

    // Include the App Check token with requests to your server.
    NSURL *url = [[NSURL alloc] initWithString:@"https://yourbackend.example.com/yourApiEndpoint"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    [request setHTTPMethod:@"GET"];
    [request setValue:tokenString forHTTPHeaderField:@"X-Firebase-AppCheck"];

    NSURLSessionDataTask *task =
        [[NSURLSession sharedSession] dataTaskWithRequest:request
                                        completionHandler:^(NSData * _Nullable data,
                                                            NSURLResponse * _Nullable response,
                                                            NSError * _Nullable error) {
        // Handle response from your backend.
    }];
    [task resume];
}];

재생 보호(베타)

재생 보호를 사용 설정한 엔드포인트에 요청할 때는 token() 대신 limitedUseToken() 호출로 요청을 래핑합니다.

Swift

AppCheck.appCheck().limitedUseToken() { token, error in
  // ...
}

Objective-C

[[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,
                                                        NSError * _Nullable error) {
    // ...
}];