사용자가 Google Play 스토어에서 합법적인 앱 버전을 구매 또는 다운로드했는지 확인하려면 개발자가 제어하는 서버에서 라이선스 확인을 실행하는 것이 가장 좋습니다.
이 가이드에서는 서버 측 라이선스 확인을 완료하는 단계별 프로세스와 확인 실행 시의 권장사항을 제공합니다.
프로세스 개요
그림 1은 앱, Google Play, 비공개 서버간에 정보가 전송되는 방식을 보여줍니다.
- 앱이 Google Play에 요청하여 특정 사용자가 합법적인 앱 버전을 구매 또는 다운로드했는지 문의합니다.
- Google Play는 응답 데이터 객체인
ResponseData유형 객체를 앱에 전송하여 응답합니다. 이 객체는 사용자가 합법적인 앱 버전을 구매 또는 다운로드했는지를 나타내는 서명된 정보입니다. - 앱은 개발자가 제어하는 비공개 서버에 요청하여 응답 데이터의 콘텐츠를 확인합니다.
- 서버는 사용자가 실제로 합법적인 앱 버전을 구매 또는 다운로드했는지를 표시하는 상태를 앱에 전송하여 응답합니다. 서버가 'success' 메시지를 제공하면 응답을 확인하고 사용��에게 라이선스가 필요한 리소스의 액세스 권한을 부여합니다.
응답 데이터는 Google Play에서 서명하고 서버에서 확인하므로 앱을 실행하는 기기에서는 객체를 수정할 수 없습니다. 앱이 서버에 의존하고 합법적인 사용자에게만 리소스를 제공하는 경우 앱은 승인되지 않은 사용자로부터 훨씬 더 안전하게 보호됩니다.
다음 섹션에서는 서버 측 라이선스 확인을 실행할 때 유의해야 할 추가 고려사항을 제공합니다.
재전송 공격으로부터 보호
사용자의 라이선스 상태에 관한 Google Play의 응답을 수신한 후 사용자는 응답 데이터를 복사하여 여러 번 사용하거나 다른 사용자에게 제공할 수 있고, 이러한 사용자들이 앱의 비공개 서버에 자체 요청을 위조할 수 있습니다. 이러한 종류의 작업을 재전송 공격이라고 합니다.
사용자가 재전송 공격을 성공적으로 실행할 가능성을 줄이려면 앱 서버에 요청을 전송하기 전에 다음 조치를 취하세요.
응답 데이터에 포함된 타임스탬프를 확인하여 Google Play에서 최근에 응답을 생성했는지 확인합니다.
지수 백오프와 같은 서버 요청의 비율 제한을 실행하여 앱이 동일한 응답 데이터를 앱 서버로 전송하려는 횟수를 줄입니다.
비공개 서버에서 Google Play 응답 데이터의 콘텐츠를 확인하기 전에 비공개 서버에 초기 인�� 기반 요청을 합니다. 이 첫 번째 요청에서 사용자 인증 정보를 서버에 전송하면 서버는 nonce 또는 한 번만 사용되는 숫자로 응답합니다. 그런 다음 ��� nonce를 비공개 서버에 하��� 다음 ���청에 포함하여 라이선스 확인 데이터를 요청할 수 있습니다. nonce에 적합한 값을 선택하는 방법에 관한 자세한 내용은 적합한 nonce 값 생성 섹션을 참조하세요.
적합한 nonce 값 생성
다음 기법 중 하나를 사용하여 추측하기 어려운 nonce 값을 만듭니다.
- 사용자 ID에 기반하여 해시 값 생성
- 사용자별로 임의의 값 생성. 이 임의의 값을 지정된 사용자 속성의 일부로 앱 서버에 저장합니다.
서버의 응답 데이터 확인
앱 서버가 앱으로 전송하는 응답 데이터를 검토할 때 라이선스 확인 라이브러리 응답이 위조되지 않았는지 확인하세요. 앱 서버의 응답 데이터에 포함된 서명을 이전 단계의 Google Play에서 앱이 수신한 키와 비교하여 확인합니다.
라이선스 확인 라이브러리(LVL) 관련 블록이 서명된 유일한 부분이라는 것을 기억해야 합니다. 따라서 앱이 신뢰해야 하는 앱 서버 응답 데이터의 유일한 부분이 바로 이 부분입니다.