2017-12-02 3 views
0

크레딧 (돈) 차감에 사용되는 클라이언트 측 API 키 처리

API 및 웹 응용 프로그램을 빌드했습니다. 사용자는 웹 앱을 통해 가입하고 고유 한 API 키를받습니다. 그런 다음 그들은 자신의 계좌에 대해 "크레딧"을 구입할 수 있습니다.이 계좌는 단순히 1 : 1의 달러 표현입니다.

사용자가 API 호출을 수행하면 API 키가 전달됩니다. 이 키는 고객을 식별하고 필요에 따라 대변을 빼는 데 사용됩니다.

여기서 명백한 문제가 있습니다. 사용자가 자신의 서버에서이 호출을 수행하고 키가 비공개로 유지되면 모든 것이 잘됩니다. 그러나 자체 서버가없는 고객은 어떻게 처리합니까? 예를 들어 간단한 Android 앱을 게시 한 사용자를 서버없이 Play 스토어에 가져와 내 제품을 통합하려고합니다. 열쇠는 클라이언트 측을 지켜야 할 것입니다. 그러면 악의적 인 사용자가 응용 프로그램의 보안 문제를 해독하고 잠재적으로 키 소유자의 크레딧을 사용하는 인증되지 않은 API 호출을 수행 할 수 있습니다.

어떻게이 문제를 해결할 수 있습니까? 이 시나리오를 처리 할 방법이 있습니까?

답변

0

(일반적으로) 문제의 한 가지 분명한 해결책은 API 키를 관리하는 서버를 갖는 것입니다 (따라서 직접 모바일 앱 -> API 액세스가 허용되지 않음). 이렇게하면 중간 서버가 API 키를 관리합니다.이 API 키는 중간 응용 프로그램의 모든 호출자에 대해 동일하거나 다를 수 있습니다. 이 응용 프로그램은 호출자를 인증하고 로그온 한 사용자를 기반으로 사용할 API 키를 잠재적으로 결정할 수 있습니다. 여러 사람이나 팀이 개발할 경우 특히 오류가 발생하기 쉽습니다. 또한 이것은 단지 문제를 계속해서 걷어차 고 있습니다. :)

하지만 모바일 앱이 API와 안전하게 통신하기를 원한다고 말합니다. 앱에서 키를 하드 코딩해야하는 이유는 무엇입니까?

표준 해결책은 앱을 다운로드 한 사용자가 런타임에 API를 통해 자신의 기기에 자체 API 키를 가져 오는 것입니다. 따라서 설정된 키가 없으므로 API 측에서 사용자가 누구인지 알 수 없습니다. 사용자가 (모바일 앱 또는 기타 무엇이든) API 키를 생성하면 모바일 앱이 원하는 방식으로 저장할 수 있습니다 (웜의 전체 깡통은 길고 짧을 것입니다. 모바일 플랫폼의 자격 증명 저장소에있는 것이 가장 좋습니다).

API 키가 정확히 무엇인지 식별하지 못했기 때문에 혼란 스러울 수 있습니다. 사용자 인 경우 (최종 사용자는 고유 한 API 키를 가짐) 위와 같이 키를 개별적으로 가져와야합니다. 반면에 API 키가 클라이언트 (모바일 앱 제작자)를 식별하면 서버가 있어야하며 그렇지 않으면 보안되지 않습니다.

관련 문제