2013-02-17 2 views
2

모바일 애플리케이션 HTTP 요청을 식별 (인증) 할 수 있습니까? 예를 들어 웹 서버의 요청은 도메인 또는 IP로 식별 할 수 있습니다. 요청한 위치를 알고 있다고 가정하고 예상치 못한 출처에서 온 것이라면 요청을 수락하거나 거절 할 수 있습니다.모바일 애플리케이션 식별

doe의 모바일 응용 프로그램에는 일종의 고유 ID가 있습니다 (모방 할 수 없음)?

답변

2

, 다음과 같은 방법을 시도 할 수 있습니다 :

편집 :이 방법을 가정 당신은 할 수 없습니다 인증을 위해 앱을 운영하는 사용자에게 의존합니다 (앱에 보안 비밀번호를 입력하도록 사용자에게 요청할 수 있기 때문에).

  1. 앱을 구현한다고 가정하면 코드에 일종의 비밀 API 키를 저장하십시오.

  2. 앱이 HTTP를 통해 API 호출을하면 HTTPS를 사용하여 항상 호출되므로 (모든 항목이 암호화 됨)

  3. 앱이 비밀 API 키를 URL 매개 변수로 보냅니다.

  4. 서버가 비밀 키가 올바른지 확인하여 인증합니다.

앱 트래픽을 스니핑하면 (HTTPS 때문에) 비밀 키가 노출되지 않습니다.

대부분 내부적으로 비밀 키를 발견하기 위해 앱을 리버스 엔지니어링하는 사람에게 취약합니다. 이것은 다양한 난독 화 및 디버깅 기술을 사용하여 어려울 수 있지만 실제로 불가능하게 만들 수는 없습니다. 컴파일 된 언어 (웹 앱용 JS가 아닌 Objective-C와 같은)를 사용하는 한 특별한 게임 없이는 이미 어려울 것입니다. API 키 문자열을있는 그대로 두지 않고 앱의 짧은 코드를 사용하여 계산하면 약 1000 배 더 강하게 발견 할 수 있습니다.

특정 문제에 대해 알지 못하면 다른 방법을 제안하기가 어렵습니다. 당신이 뭔가 다른 것을 찾고 있다면 더 자세한 정보를주십시오.

+0

실제로 웹 클라이언트와 모바일 클라이언트를 모두 인증해야합니다. 웹 클라이언트는 JavaScript를 사용하므로 비밀 키를 쉽게 얻을 수 있지만 솔루션은 모바일 클라이언트에서 제대로 작동합니다. 그래서 내가 다른 방식으로 인증 할 수있는 클라이언트 유형을 식별한다면. 감사! –

+0

이 문제는 실제로 해결책이 없습니다. 앱은 누구에게나 공개적으로 제공되므로 (특히 JS 인 경우) 앱과 소스 코드에 대한 전체 액세스 권한을 가진 사기꾼을 진정으로 구분할 수있는 방법이 없습니다. – talkol

2

"모바일 응용 프로그램"을 정의하는 방법에 따라 다릅니다. 모바일 장치에서 실행되는 모든 응용 프로그램? 모바일 장치에서 실행되는 웹 탐색? 모바일 장치 란 무엇입니까?

어쨌든, 일반적인 짧은 대답은 HTTP 헤더에서 보낸 User-Agent를 사용하여 장치 유형을 감지 할 수 있다는 것입니다. 모든 인기있는 모바일 브라우저가이를 보냅니다. 그러나 알고 있어야한다 :

    은 (쉽게)
  • 일부 응용 프로그램 (즉, 아이폰이나 안드로이드 애플 리케이션과 유사)가 사용자 에이전트를 전송하지 않는, 그런 방식으로 작성 될 수있다 스푸핑 할 수
  • HTTP 요청. 모범 사례는 User-Agent를 보내는 것을 의무화합니다.

이 작업을 수행하는 데 더 신뢰할 수있는 방법이 무엇인지 모르겠습니다. 그리고 HTTP를 통해 일이 일어나는 한 일반적으로 클라이언트에 대해 알 수있는 방법이 없을 것입니다. 대부분의 모든 유스 케이스에서 사용자 에이전트를 살펴볼 수 있습니다.

다양한 장치 데이터가 들어있는 User-Agent 데이터베이스에 액세스 할 수 있습니다 (해당되는 경우 두 가지 중 하나는 WURFL 또는 DeviceAtlas). 당신이 모바일 앱에서 보안 HTTP 호출 (웹 서비스의 API) (네이티브 컴파일 된 응용 프로그램을)해야 할 경우

2

실제로 두 가지 방법이 사용됩니다. HTTP 기본 인증 (모바일 앱의 보안 수준이 낮음) 및 OAuth2 (HTTP 기본 인증과 비교하여 보안)

  • HTTP 기본 인증 : 과정은 그들을 사용 기술 API 서비스의 작가, 또한 개발자 모두를위한 간단하다 :
  • 개발자는 API 키 (일반적으로 ID와 비밀)을 부여

. 이 API 키는 일반적으로 다음과 같습니다. 3bb743bbd45d4eb8ae31e16b9f83c9ba : ffb7d6369eb84580ad2e52ca3fc06c9d.

그는 누구도 액세스 할 수 없도록 API 키를 서버의 안전한 장소에 저장해야합니다. 그는 'Authoring Credentials를 올바르게 디코딩하기 위해 API 서버가 사용하는' 'Basic'이라는 단어와 함께 HTTP Authorization 헤더에 API 키를 입력하여 API 서비스에 API 요청을합니다. 이 키는 Base64로 인코딩되어 있습니다.

예컨대 키가 될 수있다 :이 3bb743bbd45d4eb8ae31e16b9f83c9ba : M2JiNzQzYmJkNDVkNGViOGFlMzFlMTZiOWY4M2M5YmE6ZmZiN2Q2MzY5ZWI4NDU4MGFkMmU1MmNhM2ZjMDZjOWQ =

base64로 인코딩

을 ffb7d6369eb84580ad2e52ca3fc06c9d.

API 서버가이 프로세스를 되돌립니다. HTTP Authorization 헤더를 찾으면 Base64 결과를 디코딩하고 API 키 ID 및 Secret을 읽고 요청을 처리하도록 허용하기 전에이 토큰의 유효성을 검사합니다.

HTTP 기본 인증은 간단하지만 API 키를 보호하는 모바일 앱의 주요 관심사입니다. HTTP 기본 인증을 사용하려면 원시 API 키가 각 요청에 대해 유선을 통해 전송되어야하므로 장기적으로 오용의 가능성이 높아집니다. 많은 사용자에게 배포되는 모바일 앱에 API 키를 안전하게 삽입 할 수 없으므로 실용적이지 않습니다.

예를 들어 API 키가 내장 된 모바일 앱을 제작하면 사용자가 앱을 리버스 엔지니어링하여이 API 키를 노출하고 서비스를 악용 할 수 있습니다.

그래서 HTTP 기본 인증은 웹 브라우저 및 모바일 응용 프로그램과 같은 개방 환경에서 위험합니다.

참고 : 모든 인증 프로토콜과 마찬가지로 HTTP 기본 인증은 항상 SSL을 통해 사용해야합니다. OAuth2를 열어 장치에서 API 서비스 보안을위한 우수한 프로토콜이며, 토큰 인증을 통해 모바일 사용자를 인증 할 수있는 더 좋은 방법을 제공

: OAuth2를 모바일 API 보안에 대한

  • .

으로 OAuth2 토큰 인증은 사용자의 관점 (OAuth2를 이름이 암호를 부여 흐름)에서 작동합니다

사용자가 자신이 사용자 이름이나 이메일 주소와 암호를 입력하라는 메시지가 표시됩니다 모바일 앱을 시작

. 개발자는 (SSL을 통해) 로그인 데이터가 포함 된 POST 요청을 앱에서 API 서비스로 전송합니다. 그런 다음 사용자 자격 증명의 유효성을 검사하고 특정 시간이 지나면 만료되는 사용자의 액세스 토큰을 만듭니다. 이 액세스 토큰은 모바일 장치에 저장되어 API 서비스에 액세스 할 수있는 API 키처럼 취급 할 수 있습니다. 액세스 토큰이 만료되면 사용자에게 로그인 세부 정보가 다시 표시됩니다.

OAuth2는 열린 환경에 일시적으로 저장되어 안전 할 수있는 액세스 토큰을 생성합니다. 액세스 토큰이 임시 목적으로 생성되어 손상 가능성을 줄이므로 안전합니다.

토큰은 사용 된 모바일 플랫폼에 따라 저장됩니다. Android 앱의 경우 액세스 토큰을 공유 환경 설정 및 iOS 앱의 키 체인에 저장할 수 있습니다.

관련 문제