2009-03-10 4 views
5

웹 API를 디자인하고 있습니다. 사용자가 스스로 인증하도록해야합니다. 사용자가 일반 텍스트로 사용자 이름/암호를 전달하는 것을 조금만 주저하고 있습니다. api.mysite.com/auth.php?user=x & pass = y웹 API 디자인 : 인증 방법?

내가 읽은 또 다른 옵션은 Base64 사용자 이름/비밀번호를 인코딩 한 다음 HTTP 요청을 보냅니다. 그렇다면 서버 측에서 [user ']와 _GET ['password ']를 얻은 다음 어떻게 든 디코드 할 수 있습니까?

트위터가하는 것 : http://apiwiki.twitter.com/REST+API+Documentation#Authentication?

답변

7

Base64는 전혀 보호되지 않습니다. 실제 보안을 위해 SSL을 사용하십시오.

+0

트위터 API가 보안을 어떻게 사용합니까? http://apiwiki.twitter.com/REST+API+Documentation#Authentication – shergill

+0

그들은 포스터가 원하지 않는 일반 텍스트 인 HTTP Basic Auth를 사용하고 있습니다. – truppo

+0

나는 그것이 트위터에 대한 문제/이슈가 아니라면 궁금하다. 그렇다면 정말 큰 문제일까요? – shergill

2

웹 서비스 인 경우 더 안전한 인증 형식을 사용하는 것이 좋습니다. LiveJournal 프로토콜 (예 : Challenge-Response)을 찾습니다.

+0

트위터 API가 어떻게 관리합니까? http://apiwiki.twitter.com/REST+API+Documentation#Authentication? – shergill

3

IETF는 이번 주에 HTTP에서 다양한 인증 메커니즘의 보안 속성을 설명하는 new draft을 게시했습니다. 도움이되는 정보를 찾아야합니다.

개인적으로는 적어도 digest authentication에 대해 읽고 이상이 적합한 지 분석하는 것이 좋습니다.

SSL을 사용하는 것도 옵션 일 수 있습니다. 그러나 성능, 용량 및 기타 요소를 희생하여 추가 문제를 해결합니다. 페이로드 데이터를 기밀로 유지합니다. 이것이 요구 사항이라면, 그것은 갈 길입니다.

5

truppo에서 언급했듯이 먼저 SSL을 사용하십시오.

많은 웹 서비스에는 나중에 사용되는 토큰을 반환하는 "인증"서비스가 있으며 제한된 기간 동안 만 유효하므로 일반 텍스트로 사용할 수 있습니다. 만료되면 클라이언트는 단순히 다른 인증을 수행합니다.

이 기능의 주요 이점은 SSL 요청 수가 줄어 서버의 부하가 줄어 듭니다.

1

api에 대해 일반 usename/password 인증을 사용하지 마십시오. 사람들은 매시업 서비스에 외국 서비스의 자격 증명을 넣지 않아야합니다.

Eugene과 같이 oauth http://oauth.net/ 또는 적어도 일부 challenge-response 기반 시스템을 사용해보십시오.

한 가지 쉬운 방법은 게스트 서비스가 자신의 앱과 사용자에게 연결된 토큰을 생성하도록하는 것입니다. 어떤 일을 맡기 만하면 토큰을 안전하게 만들어 일부 개인/공개 키 메커니즘으로 외국 서비스 만 허용 할 수도 있습니다.

사용자가 게스트 서비스가 인증을 받기 위해이 토큰을 사용하려면 먼저 응용 프로그램에서이 토큰을 인증해야합니다.

+0

의견에 감사드립니다. 나는 도전 반응 시스템을 구현할 것이다. – shergill

0

나는 article 눈을 열었습니다.

요약하면 사용자 당 한 쌍의 API 키를 사용하십시오. 하나는 클라이언트 인증 용이고 하나는 매개 변수 서명 용입니다.