2012-01-29 1 views
5

소셜 네트워킹 사이트를 개발하고 응용 프로그램의 핵심이 완전히 종료되도록 결정한다고 가정합니다. 사용자가 암호로 로그인합니다. 자, 내 질문에 모든 요청을 비밀 번호와 로그인 쌍이 필요합니다 (귀하의 신원을 제공해야한다고 가정) URL의 끝에 www.site.com/index.php?p=pass&l=login처럼? 나는 모든 요청에 ​​대해 그것을 요구하는 것에 대해 약간 긴장 될 것입니다. 나는 누군가가 패킷을 스눕 (snoop)하고 패스워드를 포착하고 쉽게 로그인 할 수 있기 때문에 그렇게 할 수 없다는 것을 알고있다. HTTPS에서 수행 된 모든 요청이 의미가 있다고 생각하지 않습니다 (리소스에 과도한 부담이 있음).REST API에는 요청할 때마다 암호와 로그인이 필요합니까?

그래서 이해할 필요가없는 부분을 기입하십시오.

+2

조사 * 요구 서명 *하여 OAuth 및/또는 다른 토큰 기반 인증 메커니즘. 나는 완전한 대답으로 이것을 쓸 시간이 없지만, 이것은 당신에게 무엇인가를 찾아 줄 것입니다. – deceze

+0

감사합니다 - 성능에 앞서 그들에 대한 자세한 내용을 – netrox

답변

12

먼저 SSL을 사용하는 것이 너무 비싸지 않다면 SSL을 사용하십시오. 성능 최적화 이전에 보안이 제공됩니다.

이제 사용자 이름과 비밀번호를 전달하는 경우 : 일반적으로 "API 액세스 토큰"등이 있습니다. 실제로는 사용자 이름/비밀번호가 아니지만 다른 사람이 가지고있을 때는 API 요청을 할 수있는 권한이 부여됩니다. 원하는대로 제한 또는 무제한 유효성을 가질 수 있습니다. 토큰을 서명으로 만들 수도 있습니다 - 사용자가 일부 키로 요청에 서명하고 서명을 유효화합니다.

네, 각 API 요청이 마지막 요청과 독립적이므로 HTTP 기본 인증 또는 이와 동등한 것을 사용하거나 모든 요청에 ​​API 토큰 (또는 다른 서명 장치)을 전달해야합니다.

+1

+1 보안을 위해 확실히 읽을 것입니다. 재해 복구에 일주일을 소비 할 때 이러한 저장된주기는 아무 가치도 없습니다! – jprofitt

1

전통적인 세션 추적 규칙은 다른 시스템과 마찬가지로 REST에도 적용됩니다. 최선의 방법은 로그인을 한 다음 클라이언트에게 모든 요청 (쿼리 문자열, 쿠키 또는 사용자가 가지고있는 것)에 전달하는 토큰을 반환하는 것입니다. 토큰은 모든 적절한 세션 정보, 특히 사용자의 신원 정보를 포함하는 일부 서버 사이트 데이터 스토어에 인덱스합니다.

6

일반적으로 모든 방식으로 재사용 할 수있는 토큰을 생성하는 로그인 메소드를 호출합니다 다음 요청.

모든 조언에 SSL 사용을 강요하는 것이 좋습니다. 보안 로그인을 요청하고 세션 ID와 마찬가지로 특정 세션에 대한 임시 토큰을 생성해야합니다.

아래 다이어그램에서 인증을 제공하기 위해 Flickr API에서 OAuth를 사용하는 방법을 확인할 수 있습니다. 이 시나리오에서는 임시 토큰을 사용하여 영구 토큰 및 토큰 비밀을 요청합니다.

OAuth Flickr diagram

은 촬영 : http://www.flickr.com/services/api/auth.oauth.html#access_token

관련 문제