2013-02-01 6 views
0

현재 원격 웹 사이트를 통해 일부 서비스를 제공해야하는 REST/JSON API를 개발 중입니다. 나는이 웹 사이트의 최종 고객을 알지 못하며 API 서버에 계정을 갖고 있지 않아야합니다. API 서버에 존재하는 유일한 계정은 웹 사이트를 식별하는 계정입니다. 이 모든 것이 RESTful이며 따라서 모든 통신은 최종 사용자 브라우저 (자바 스크립트/JSON을 통해)와 내 REST API 서비스 사이에있을 것이므로 중개인의 청구서를 늘리는 데 관심있는 제 3 자에 의해 시스템이 남용되지 않도록하려면 어떻게해야합니까? ? (중개인이 내 서비스를 재판매하는 웹 사이트의 소유자 인 경우). 어떤 인증 방법을 사용하면 사용자가 웹 사이트에서 js 코드를 가져 와서 웹 사이트 소유자를 파산시키는 데 1000000 번이나 걸리는 것을 막을 수 있습니까? 나는 HTTP_REFERER를 사용하려고 생각하고 IP 주소 (어떤 서버가 코드를 호스팅하는지 알아 내고이 IP를 기반으로 인증)를 번역했지만 HTTP_REFERER가 쉽게 스푸핑 될 수 있다고 추정합니다. 내 고객의 최종 고객이 API 서버에 등록하지 않는 경우이 API의 목적을 무효화합니다.나머지 사용자 (AAA)의 나머지 API

몇 가지 아이디어를주십시오.

덕분에, 댄

답변

0

이것은 당신을위한 옵션이 될,하지만 나는이 경우에는 이전에했던 것은 REST 호출의 상단에 프록시를 만드는 것입니다하지 않을 수 있습니다. 웹 사이트는 자체 내부 서비스를 호출하고 해당 서비스는 REST 호출을 호출합니다. 장점은, 당신이 말했듯이, 아무도 귀하의 REST 전화를 직접 공격하거나 전화를 속일 수는 없습니다.

그런데 HMAC (http://en.wikipedia.org/wiki/Hash-based_message_authentication_code)와 같은 인증 체계를 구현할 수 있습니다. 나는 이것을 사용하는 많은 API를 보았다. http://support.ooyala.com/developers/documentation/api/signature_java.html

어느 쪽이든 난 당신이 몇 가지 작업을 서버 측을해야 할 것 같아요 :

Using HMAC-SHA1 for API authentication - how to store the client password securely?

여기에 자바 코드를 인증하기 위해 어떻게 보이는지이다. 그렇지 않으면 모든 것이 순수한 클라이언트 측 일 경우 사람들이 API를 리버스 엔지니어링 할 수 있습니다.

+0

나는 원격 웹 사이트에 $ _SERVER [ 'REMOTE_ADDR']를 통해 최종 사용자 IP 주소를 제공하고 원격 서버가 $ _SERVER [ 'SERVER_ADDR]을 통해 서버 IP를 제공하도록합니다. ']를 선택하면 API가 JS 코드에서 사용할 만료 토큰을 생성합니다.이 토큰은 고객의 원격 IP에 5 분 정도의 권한을 부여합니다. 이렇게하면 (fopen을 사용하여) IP 주소가 유효한 웹 사이트에서 오는 API에 도달했음을 인증 할 수 있으며 고객은 향후 5 분 동안 원하는 것을 무엇이든 할 수 있습니다. 당신이 볼 수있는 단점이 있습니까? – Dan

+0

5 분이 만료되어 사용자가 갑자기 물건을 사용할 수 없으면 어떻게됩니까? 모든 잠재 고객이 PHP를 사용합니까? – ryan1234

+0

그들이 사용하는 것은 부적절합니다. API 서버가 PHP를 사용하고 $ _SERVER 물건을 사용하고 있습니다. 나는 사용자가 해당 시간 프레임 내에 현재 페이지를 남기지 않으면 ajax를 통해 인증 파일 (fopen을 수행하는 파일)을 300 초마다 호출하는 js 코드로 타이머를 구현할 수 있다고 가정합니다. 그것은 토큰을 갱신합니다. – Dan