2014-03-13 4 views
4

저는 최근 내 앱 엔진 보안에 관한 많은 연구를 해왔습니다. 현재, 나는 아래의 질문과 그 질문의 링크를 통해 읽어 봤는데 :내 Google App Engine API 끝점 보호

How do I restrict Google App Engine Endpoints API access to only my Android applications?

그러나, 그것은 내 문제에 응답하지 않습니다. 내 질문은 위의 질문과 유사하여 내 끝점 API에 대한 액세스를 내 앱에만 제한합니다. 그 사람은 자격 증명에 정확한 이메일을 입력 할 때 제대로 작동하는 것처럼 보였습니다.

제 질문은 자격 증명을 입력하지 않고 동일한 결과를 얻을 수 있는지입니다. 내 응용 프로그램 만 내 끝점 API를 사용하여 다른 응용 프로그램을 악용하거나 내 할당량을 사용하지 못하도록합니다. 내 안드로이드 응용 프로그램에 대한 클라이언트 ID를 이미 가지고 있으며 내 @API 주석 내에 배치했습니다. 그것이 효과가 있는지 테스트하기 위해 다른 api 클래스의 @API 표기법에서 클라이언트 ID에 임의의 값을 지정했습니다. 그러나, 내 애플 리케이션은 여전히 ​​두 클래스에서 메서드를 사용할 수있었습니다. 어떤 도움이 필요합니까? 워드 프로세서에서 읽기 및 추가 연구에서

-Edit-

이 앱을 승인의 엔드 포인트 방법은 사용자를 인증하여 사용자가 null의 경우 확인하는 내 API입니다. 내 질문은 사용자를 인증하는 과정에서 Google이 내 앱의 SHA1 지문을 읽고 클라이언트 ID 목록에 인증 할 수 있습니까? 그렇다면 내 엔드 포인트에서이 프로세스를 복제하여 요청을하는 앱의 SHA1 지문을 확인하고이를 설정 값과 비교할 수 있습니까? 끝점 뒤에있는 메커니즘을 잘 이해하지 못하기 때문에이 잘못을 이해하는 경우 수정하십시오.

+1

누군가가 나에게 좋은 대답을 해줄 수 있기를 바랍니다. 그러나 어려울 것으로 생각됩니다. 예를 들어 비공식 Snapchat 클라이언트가 너무 많은 이유는 비공식 앱이 Snapchat의 App Engine 끝점에 쉽게 액세스 할 수 있기 때문입니다. 할 수 있다면 Snapchat이 지금까지 조치를 취했을 것이라고 생각하고 싶습니다. –

+0

하지만 어떻게 든 Google은 앱의 클라이언트 ID를 인증하여 사용자를 인증 할 때 API 액세스를 제한 할 수 있습니다. 어떻게 그럴 수 있죠? 좀 더 구체적인 질문을 편집 할 것입니다. – noraacee

+0

@AayCee, 편집에 설명 된대로 작동합니까? 나는 똑같은 문제에 직면 해있다. – myanimal

답변

2

android 앱에 액세스 권한이 있으면 사용자가 액세스 할 수 있습니다. 동기를 부여받은 당사자는 장치를 투명한 프록시 뒤에 두거나 디버거를 통해 앱을 실행하는 것 등 프로토콜 검사에 대한 다양한 옵션을 제공합니다. 게시하기 전에 ProGuard을 통해 앱을 실행하는 것이 좋습니다. 이렇게하면 프로세스가 다소 어려워집니다.

궁극적으로 신뢰할 수없는 상대방에게 appengine API를 강력하게 만들어야합니다. 이것은 단순히 웹 상태입니다. 당신이 당신의 엔드 포인트 API를 보호 할 수있는 방법

0

여기에 설명되어 있습니다 : 청중 : : 서버 : CLIENT_ID : 9414861317621.apps.googleusercontent.com http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html

비밀 당신이 구글에서 토큰은 다음과 같은 범위를 사용하여 플레이 요청할 것입니다 9414861317621.apps.googleusercontent.com이 귀하의 ClientId입니다.

Google Play에서 엔드 포인트 앱에서 ID를 검색하고 ID를 찾으면 Google 서명 된 JSON 웹 토큰을 반환합니다. 그 다음에 그 이드를 당신의 요청과 함께 전달합니다. 위의 기사는 당신이 시체와 함께 전달해야한다고 말합니다. 그렇지 않으면 자신의 엔티티를 더 이상 전달할 수 없으므로 아마도 다른 매개 변수를 추가 할 수 있습니다. 어쨌든 서버 백엔드가 토큰을 받으면 API 요청을 처리하기 전에 정통한 경우 Google에 설명 된대로 요청하십시오.

추가 매개 변수를 사용하여 토큰을 전달하는 경우 HttpServletRequest를 끝점 서명에 추가 한 다음 request.getHeader ("Yourname")를 사용하여 읽을 수 있습니다. 어딘가에 기록 될 수 있으므로 URL 매개 변수로 매개 변수를 추가하지 마십시오.이 같은 엔드 포인트 API를 빌드 할 때 당신이 당신의 토큰을 전달 할 수있는 안드로이드 측면에서

public void endpointmethod(

     // ... your own parameters here 

     final HttpServletRequest request 
) throws ServiceException, OAuthRequestException { 
    request.getHeader("YourHeaderName") // read your header here, authenticate it with Google and raise OAuthRequestException if it can't be validated 

, 당신은 각각의 모든 요청을 할 필요가 없습니다 :

Yourapiname.Builder builder = new Yourapiname.Builder(AndroidHttp.newCompatibleTransport(), getJsonFactory(), new HttpRequestInitializer() { 
     public void initialize(HttpRequest httpRequest) { 
      httpRequest.setHeader(...); 
     }}) 

희망 이는 엔드 포인트 API의 보안을 유지하는 데 도움이됩니다. 그것해야합니다.