2009-05-11 3 views
35

다른 웹 사이트/앱이 (PHP 게이트웨이를 통해) 일부 웹 사이트 데이터베이스에 액세스 할 수있는 간단한 REST JSON API가 있습니다. 기본적으로 서비스는 다음과 같이 작동합니다. example.com/fruit/orange를 호출하면 서버가 오렌지색에 대한 JSON 정보를 반환합니다. 문제는 다음과 같습니다.이 서비스에 액세스 할 수있는 웹 사이트 만 필요합니다. 간단한 API 키 시스템을 사용하면 승인 된 웹 사이트 (잠재적 인) 클라이언트 측 코드에서 키를 복사하여 모든 웹 사이트가 신속하게 키를 얻을 수 있습니다. 나는 OAuth를 보았지만, 내가하는 일에 조금 복잡해 보인다. 솔루션?간단하고 안전한 API 인증 시스템

+0

HTTPS를 통한 HTTP 기본 인증. – Petah

답변

4

누군가의 클라이언트 측 코드가 유출 된 경우 새 키를 받아야합니다. 코드가 노출되면 할 수있는 일이 많지 않습니다.

그러나 주어진 키에 대해 시스템에 인증 된 서버의 IP 주소를 등록하도록 요구하면 더욱 엄격해질 수 있습니다. 이것은 추가 단계를 추가하고 과잉 될 수 있습니다.

"간단한 API 키"를 사용하여 어떤 의미인지 모르겠지만 개인 키 (클라이언트와 서버에만 알려져 있음)를 사용하는 인증을 사용해야하며 어떤 종류의 체크섬 알고리즘을 수행해야합니다 클라이언트가 실제로 당신이 생각하는 사람인지 확인하고 데이터가 전송 중 수정되지 않았는지 확인합니다. Amazon AWS은이를 수행하는 좋은 예입니다.

나는 클라이언트 측에서 코드가 손상되지 않았 음을 보증하기 위해 다소 엄격하다고 생각합니다. 자신의 데이터 보안을 위해 고객에게 책임을 맡기는 것이 합리적이라고 생각합니다. 물론 이것은 공격자가 클라이언트의 계정을 망칠 수 있다고 가정합니다.

아마도 특정 계정에 대한 IP 요청의 로그를 유지할 수 있으며 새 IP가 제공되면 계정에 플래그를 지정하고 클라이언트에게 전자 메일을 보내고 해당 IP를 인증하도록 요청할 수 있습니다. 어쩌면 그렇게 될지 모르겠다.

2

기본적으로 IP로 액세스를 제한하거나 API 키를 사용하는 두 가지 옵션이 있습니다. 두 옵션 모두 양수 및 음수가 있습니다.

IP로 제한
이것은 서비스 액세스를 제한하는 편리한 방법 일 수 있습니다. 특정 인증 기능을 구현하도록 강요하지 않으면 서 서비스에 액세스 할 수있는 제 3 자 서비스를 정확하게 정의 할 수 있습니다. 그러나이 방법의 문제점은 타사 서비스가 예를 들어 JavaScript로 작성된 경우 들어오는 요청의 IP가 타사 서비스의 서버 IP가 아니라 사용자의 IP가 될 것이라는 것입니다 서버가 아니라 사용자의 브라우저에 의해. IP 제한을 사용하면 클라이언트 구동 응용 프로그램을 작성할 수 없으며 모든 요청이 적절한 액세스 권한을 가진 서버를 통과하게됩니다. IP 주소도 스푸핑 될 수 있습니다.

API 키
API 키의 장점은 알려진 IP 목록을 유지할 필요가없고 API 키 목록을 유지해야하지만 유지 관리를 자동화하는 것이 더 쉽다는 것입니다. 기본적으로 이것이 작동하는 방식은 사용자 ID와 비밀 암호와 같은 두 개의 키가 있다는 것입니다. 서비스에 대한 각 메소드 요청은 요청 매개 변수, 사용자 ID W이 값의 해시 (해시 소금으로 암호가 사용되는 곳)로 구성된 인증 해시를 제공해야합니다. 이렇게하면 액세스를 인증하고 제한 할 수 있습니다. 이것에 대한 문제는 제 3 자 서비스가 클라이언트 중심 (예 : JavaScript 또는 ActionScript)으로 작성되면 누구나 코드에서 사용자 ID와 비밀 염분 값을 파싱 할 수 있다는 것입니다.

기본적으로 특별히 정의한 소수의 서비스 만 서비스에 액세스 할 수 있도록하려면 IP 제한을 사용하여 서버를 통해 모든 요청을 라우팅하도록해야합니다 .API 키를 사용하는 경우이를 시행 할 방법이 없습니다.

28

OAuth를 사용해야합니다.

실제 OAuth 사양에는 3-legged 버전과 2-legged 버전이 있습니다. 3 다리 버전은 대부분주의를 끄는 버전이며, 이 아니며 사용하려는 버전이입니다.

좋은 소식은 2-legged 버전이 원하는대로 작동한다는 것입니다. 응용 프로그램에서 공유 비밀 키 (Amazon의 웹 서비스 모델과 매우 유사합니다. HMAC- SHA1 서명 방법) 또는 공용/개인 키 시스템 (RSA-SHA1 서명 방법 사용)을 통해. 나쁜 소식은 3 다리 버전만큼 아직 지원되지 않았기 때문에 지금 당장해야 할 일보다 조금 더 많은 작업을해야 할 수도 있다는 것입니다.

기본적으로 2 다리 OAuth는 현재 날짜, "nonce"라고하는 임의의 숫자 및 요청 매개 변수를 포함하는 여러 필드에 "서명"(해시를 계산)하는 방법을 지정합니다. 이렇게하면 매우 어렵게 웹 서비스에 대한 요청을 가장합니다.

OAuth는 천천히 그러나 확실하게 이런 종류의 표준으로 받아 들여지고 있습니다. 사람들이 그것을 수용 할 수있는 다양한 라이브러리를 활용할 수 있기 때문에 당신이 그것을 받아들이면 장기적으로 최선을 다할 것입니다.

처음에는 들으려고했던 것보다 더 정교합니다. 그러나 좋은 소식은 많은 사람들이 그것에 많은 시간을 할애하여 아무 것도 잊어 버리지 않았다는 것입니다. 가장 최근의 사례는 커뮤니티가 현재 닫고있는 OAuth 보안의 차이를 발견했다는 것입니다. 자신의 시스템을 발명했다면,이 모든 것을 스스로 알아 내려고해야합니다.

행운을 빈다.

크리스

21

OAuth를 여기 해결책이 아니다.
OAuth는 최종 사용자가 있고 타사 앱이 최종 사용자 암호를 처리하지 못하도록하려는 경우입니다. OAuth를 사용하는 경우 : 대한 http://blog.apigee.com/detail/when_to_use_oauth/

이동을 간단한 API 키.
더 안전한 솔루션이 필요한 경우 추가 조치를 취하십시오.

여기에 연결하기 전에 사용자에게 거대한 버그를 생산 보인다 IP의 보안의 생산의 모든 http://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/

+0

LOL : blog.apigee.com에 대한 링크가 손상되어 "액세스가 거부되었습니다.이 페이지에 액세스 할 권한이 없습니다."가 표시됩니다. 그러나 그것은 2009 년부터 시작되었으므로 정보가 얼마나 관련이 있는지 확실하지 않습니다 ... – auco

+1

누군가가 여전히 관심이 있다면 인터넷 보관함 링크가 있습니다 (아직 생각했습니다) : https://web.archive.org/web/ 20140708081525/https : //blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization – Gerard

0

, 좀 더 정보입니다. 심비안 60은 여러 사용자 (Opera Handler UI 6.5, Opera Mini v8 및 10)와 함께 코딩 된 UI, 완전히 채워진 네트워크 설정과 함께 untraced, reliable 및 secure 신호를 남길 수있는 최대의 기능을 갖추고 있습니다. 더 빠른 링크 방법을 발견 할 수있는 방법이 최종적으로 얻어 질 때 다른 기능을 제한하는 이유는 무엇입니까? 보다 확실하게 계정을 유지하고 '실제 계정'을 적절하게 모니터링합니다. 요금 청구서의 트랙 준수 여부와 사용자가 만기가되지 않은 잔액을 보유하고 있는지를 알면 대중/서명 된 모바일에 대한 인터넷 신호의 링크가 더 빨라집니다 산업. 왜 보안 기능을 사이트에 설치하기 전에 하드 보안 기능을 사용하면 매월 계정을 방문하면 모든 연결 문제가 지워질 수 있습니까? 모바일 사용자는 모두 미지급 청구서가 있으면 '연결'할 수있는 기능이 없어야합니다.유료로 제공되는지 여부에 관계없이 '모니터링 기능'대신 운영 체제 (전자 메일 계정)로 프로그램 된 등록 및 응용 프로그램 계정 인 'ALL in One'을 제공하지 않는 이유는 무엇입니까? 다른 부서로). 그리고 '아니라면'그들의 계정을 정확하게 끄고 다른 링크 기능. 그들 각각은 자신이 다시 매수할 수있는 미납 된 청구서로 인해 잠겨 있거나 해제 된 경우, 더 많은 책임감있는 사용자가 될 수 있도록 만료 될 수 있으며, 심지어는 만료 될 수 있으므로 매일 매료 될 곳에 대한 자신의 이익을 가지고 있습니다. 계정이 유지되지 않으면. 네트워크 공급자와 공동 작업으로 식별 된 '실제 계정'을 월간 모니터링 또는 액세스하는 것은 데이터 서비스를 볼 때 항상 사용자 이름과 암호, 위치, 사용 권한을 요구하는 대신 개인 정보 보호를 강화합니다. IP가 이미 첫 번째 ID로 표시되거나 '사용자의 위치를 ​​찾는'경우 브라우저 사전 검색에 배치하는 것이 좋지 않으며 '데이터 가져 오기'또는 '데이터 처리'를 사용하지 않는 것이 좋습니다.

+0

가독성을 높이기 위해 답을 블록으로 재구성하는 것이 좋습니다. – Jendas