앱 체크는 Apple 플랫폼의 DeviceCheck 및 App Attest, Android의 Play Integrity 및 SafetyNet, 웹 앱의 reCAPTCHA v3 및 reCAPTCHA Enterprise( 개요 )와 같은 여러 공급자에 대한 기본 제공 지원을 제공합니다. 이들은 대부분의 개발자의 요구를 충족해야 하는 잘 알려진 공급자입니다. 그러나 사용자 지정 앱 체크 공급자를 구현할 수도 있습니다. 다음과 같은 경우 사용자 지정 공급자를 사용해야 합니다.
기본 제공 공급자가 아닌 다른 공급자를 사용하려고 합니다.
지원되지 않는 방식으로 기본 제공 공급자를 사용하려고 합니다.
Apple, Android 및 웹 이외의 플랫폼을 사용하여 장치를 확인하려고 합니다. 예를 들어 데스크톱 OS 또는 사물 인터넷 장치용 앱 체크 공급자를 생성할 수 있습니다.
모든 플랫폼에서 고유한 검증 기술을 구현하려고 합니다.
개요
맞춤 앱 체크 공급자를 구현하려면 Node.js Firebase Admin SDK 를 실행할 수 있는 안전한 백엔드 환경이 필요합니다. 이는 Cloud Functions, Cloud Run 과 같은 컨테이너 플랫폼 또는 자체 서버일 수 있습니다.
이 환경에서 앱 클라이언트로부터 인증 증명을 수신하고 인증 증명이 인증 평가를 통과하면 앱 체크 토큰을 반환하는 네트워크 액세스 가능 서비스를 제공하게 됩니다. 진위 증명으로 사용하는 특정 지표는 사용 중인 타사 공급자 또는 사용자 지정 논리를 구현하는 경우 자체 발명의 지표에 따라 달라집니다.
일반적으로 이 서비스를 REST 또는 gRPC 끝점으로 노출하지만 이 세부 정보는 사용자에게 달려 있습니다.
토큰 획득 끝점 만들기
클라이언트에서 인증 데이터를 수신할 수 있는 네트워크 액세스 가능 엔드포인트를 만듭니다. 예를 들어 Cloud Functions를 사용하는 경우:
// Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken exports.fetchAppCheckToken = functions.https.onCall((authenticityData, context) => { // ... });
진위 데이터를 평가하는 엔드포인트 로직에 추가합니다. 이것은 사용자 지정 앱 체크 공급자의 핵심 논리이며 직접 작성해야 합니다.
클라이언트가 인증된 것으로 판단되면 Admin SDK를 사용하여 앱 체크 토큰을 생성하고 토큰과 만료 시간을 클라이언트에 반환합니다.
const admin = require('firebase-admin'); admin.initializeApp(); // ... admin.appCheck().createToken(appId) .then(function (appCheckToken) { // Token expires in an hour. const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60; // Return appCheckToken and expiresAt to the client. }) .catch(function (err) { console.error('Unable to create App Check token.'); console.error(err); });
클라이언트의 신뢰성을 확인할 수 없는 경우 오류를 반환합니다(예: HTTP 403 오류 반환).
선택 사항 :
AppCheckTokenOptions
개체를createToken()
에 전달하여 사용자 지정 공급자가 발급한 앱 체크 토큰의 TTL(수명)을 설정합니다. TTL은 30분에서 7일 사이의 값으로 설정할 수 있습니다. 이 값을 설정할 때 다음 장단점에 유의하십시오.- 보안: TTL이 짧을수록 공격자가 유출되거나 가로채는 토큰을 남용할 수 있는 기간이 줄어들기 때문에 더 강력한 보안을 제공합니다.
- 성능: TTL이 짧을수록 앱이 증명을 더 자주 수행합니다. 앱 증명 프로세스는 수행될 때마다 네트워크 요청에 대기 시간을 추가하므로 짧은 TTL은 앱의 성능에 영향을 미칠 수 있습니다.
기본 TTL인 1시간은 대부분의 앱에 적합합니다.
다음 단계
이제 사용자 지정 공급자의 서버 측 논리를 구현 했으므로 Apple , Android 및 웹 클라이언트에서 이를 사용하는 방법을 알아봅니다.