이 질문은 이전에 여러 가지 형태로 질문되었습니다. 그러나 나는 "https 사용"답변을 찾고 있지 않습니다. 이미 HTTPS를 사용하고 있으며 페이로드의 민감성에 대해 걱정하지 않습니다.iPhone 응용 프로그램에서 REST API를 사용할 때의 보안
그러나 내가 연구하고있는 iPhone 응용 프로그램은 내가 만든 REST API와 이야기하고 있습니다. (응용 프로그램과 서버를 제어 할 수 있으므로 어떤 제안이라도 환영합니다.)
나는 내 "API 키는"만 필요가 access_token
을 취득으로 전송하고자하는 클라이언트 ID 및 클라이언트 시크릿의 조합을 의미 인증을 위해 OAuth2를 프로토콜을 사용합니다. 그런 다음 모든 요청은 access_token
및 요청 본문의 HMAC가 포함 된 헤더 (클라이언트 비밀번호를 키로 사용)를 사용하여 서버로 전송됩니다. 이 추가의 유일한 이유는 누군가가 access_token
으로 API 요청을 할 수 없기 때문입니다.
내가 말하는 API는 애플리케이션을 공개 할 때 공개 될 예정입니다. 그래서 다른 사람들이 API 호출을 할 수 있다는 것에 대해 걱정할 필요는 없습니다.
내가 걱정하는 것은 :
- 사람들은 내가 내 응용 프로그램에서 오지 않았다 서버 측에서 감지 할 수 있음을 의미한다 (내 응용 프로그램의 클라이언트 자격 증명을 사용하여 API 호출을 할 수있는)
- 사람들은 내 클라이언트 ID 그들이해야 할 수 있습니다 추가 범위를 남용 할 수있는, 그리고 기존의 API 사용자가 없습니다
내 생각 엔 이외의이 문제에 대한 해결책이 (정말이없는 점이다 UIWebView 사용 및 glor 만들기 ified webapp)하지만 어쨌든 여기에서 물어볼 것이라고 생각했습니다.
앱에서 소비해야하는 클라이언트 ID/클라이언트 비밀을 보호 할 방법을 모두 생각해 낼 수 있습니까?
oauth가 앱에 안전하지 않다는 말을하고 있습니까? oauth 클라이언트는 모든 매개 변수에 서명해야하므로 액세스 토큰과 암호가있는 클라이언트 만 일부 매개 변수를 포함 할 수 있으며 올바르게 서명해야합니다. – danh
@danh 사실 OAuth2는 OAuth1의 일부인 매개 변수에 서명하지 않습니다. 하지만 아니, 비교적 적은 노력으로 누군가 내 앱을 리버스 엔지니어링하고 내 고객 ID와 비밀번호를 얻을 수 있으며 API에 대한 요청을 내 애플리케이션으로 발행 할 수 있습니다. –
아이폰 앱을 구매 한 사람에게 고유 한 식별자를 부여 할 수 있다면이를 단일 사용자의 자격 증명에 연결할 수 있습니다. 이를 통해 iPhone 응용 프로그램을 얻은 클라이언트와 다른 소스에서 API를 호출 한 클라이언트를 구별 할 수 있습니다. – AardvarkSoup