사용자 로그인 및 SSL을 통한 통신에 익숙해 져 있으므로 질문에서 더 흥미로운 부분에 대해 중점적으로 다룰 것입니다. 읽기 전용 작업을 보장하는 방법- 사용자 인증이 필요 하지 않은 사용자 는 자신의 클라이언트 앱에서만 허용됩니까?
다른 무엇보다도, fNek이 이전 답변에서 암시 한 단점이 있습니다. 클라이언트 앱은 잠재적으로 악의적 인 사용자가 사용합니다. 검사, 통신 검사, 코드 분해가 가능합니다. 내가 제안 할 것은 누군가가 클라이언트를 리버스 엔지니어링하지 않고 REST API를 남용하지 않도록 보장 할 수는 없습니다. 그러나 우발적 인 시도 앞에 장벽을 두어야합니다.
어쨌든 일반적인 접근 방식은 다음과 같습니다.
- 클라이언트는 비밀을 포함
- 요청시 요청 매개 변수를 비밀과 연결하고 결과를 해시합니다.
- 이 해시는 요청과 함께 전송되고 서버에 의해 확인됩니다.
예는 상상 GET
에 대한 요청을/products/widgets
클라이언트 시크릿이 "OH_HAI_I_IZ_SECRET"이라고 가정합니다.
HTTP 동사, URL 및 비밀을 연결하십시오.
GET/products/widgetsOH_HAI_I_IZ_SECRET
그리고 그 SHA-1 해시를 가져 가십시오 .
4156023ce06aff06777bef3ecaf6d7fdb6ca4e02
그런 다음 함께 보내십시오.
GET /products/widgets?hash=4156023ce06aff06777bef3ecaf6d7fdb6ca4e02
마지막으로, 누군가 개별 요청을 최소한 재생하지 못하게하려면 타임 스탬프도 가져 와서 매개 변수와 해시에 추가하십시오. 예를 들어, 현재 Unix 시간은 1384987891입니다. 연결에 추가하십시오.
GET/products/widgetsOH_HAI_I_IZ_SECRET1384987891
해시 :
2774561d4e9eb37994d6d71e4f396b85af6cacd1
그리고 보내기 :
GET /products/widgets?time=1384987891&hash=2774561d4e9eb37994d6d71e4f396b85af6cacd1
서버는 해시를 확인하고 타임 스탬프가 최신인지 확인합니다 (예 : 5 분 이내에 시계가 완벽하게 동기화되지 않도록 허용)
경고! 모바일 앱에 대해 이야기하고 있기 때문에 누군가의 휴대 전화에 시계가 잘못 연결될 위험이 있습니다. 또는 시간대가 잘못되었습니다. 또는 뭔가. 해시에 시간을 추가하면 일부 합법적 인 사용자가 중단 될 수 있으므로이 아이디어를주의해서 사용하십시오.