2011-11-16 3 views
2

RESTful 아키텍처를위한 인증 체계를 구현해야한다. 내가 읽은 여러 기사에서 HTTP를 사용하는 기본 인증과 쿠키를 사용하여 세션 관리를 포함합니다.RESTful 인증 스키마

그러나 나는 쿠키의 사용을 잘 이해하지 못하고 있습니다. 내가 이해하는 것은 사용자가 처음으로 자격 증명을 전송한다는 것입니다. 서버는 신임이 OK인지 확인합니다. '예'인 경우 서버는 인증 토큰을 생성하여 쿠키에 저장합니다. 이후, 각 요청마다 서버는 쿠키에서 토큰의 유효성을 검사합니다.

그러나 쿠키 내용이 유효 함을 서버가 어떻게 알 수 있습니까? 어딘가에 그것을 저장하고 그것을 비교합니까 ??

답변

1

저는 전문가는 아니지만 이것을 이해하는 좋은 출발점은 Hartl의 저서 section on Sessions입니다.

내가 틀리지 않으면 다음과 같이 작동합니다.
토큰을 만들면 수식이 사용됩니다. 사용자 이름과 고유 한 사용자 키 (소금)가 함께 암호화됩니다. 사용자 이름과 소금은 모두 데이터베이스에 저장되며 소금은 해당 사용자에게 고유합니다. 따라서 암호가 일치하는지 비교하기 위해 수행 할 것처럼 쿠키의 유효성을 검사하려면 토큰을 다시 만들어 쿠키의 쿠키와 비교하십시오. 일치하는 경우 올바른 사용자가 로그인되어 권한이 부여됩니다.

희망이 도움이, 또는 적어도 올바른 방향 :

+0

우리가 쿠키에 토큰을 보낼 때마다 보안 위협이 발생할 수 있다고 생각합니까 ?? – Noor

+0

위에서 설명한 바와 같이 토큰을 다시 서버로 보내는 것은 확실히 보안 문제이므로 HTTPS 프로토콜을 사용하여 최소화해야합니다. – sangupta

+0

글쎄, 은행 시스템 용으로 사용할 지 모르겠다.하지만 토큰을 만들 때 모든 로그인에 대해 고유 한 번호 (예 : 타임 스탬프)를 사용하면 다른 사람이 도용하더라도 시스템이 타임 스탬프가 다르기 때문에 "도둑"이 로그온 할 수있게하십시오. 설명 된 방법은 대부분의 경우 충분히 안전해야합니다. 좀 더 편집적이라면 쿠키 대신 데이터베이스에 세션을 저장하는 방법을 살펴보십시오. –

3

여기서 중요한 포인트는 인증 토큰에서 당신을 가리 킵니다. 하나를 생성하고 클라이언트로 되돌려 보낼 때 데이터베이스라고 가정 할 때 auth 토큰을 사용자 이름과 함께 저장합니다. 인증 토큰을 쿠키에 저장합니다. 후속 요청에서 클라이언트는 auth 토큰을 포함하는 사용자 이름과 쿠키를 보냅니다. 제공된 토큰에 대해이 토큰을 검증 한 다음 필요에 따라 조치를 수행하십시오.

그러나 설정 쿠키는 웹 서비스 호출을 상태 저장하고 REST의 목적에 어긋나게 만듭니다.

인증/승인을 얻으려면 쿠키에 인증 토큰을 설정하는 대신 응답 값으로 다시 보내십시오. 클라이언트는 auth 토큰의 값을 읽은 다음 요청 본문의 매개 변수로 모든 REST 요청에 동일한 값을 제공합니다. 따라서 쿠키를 설정할 필요가 없습니다. OAuth 기반 API 액세스에서 구현 된 기능의 톤 다운 및 단순 버전이라고 할 수 있습니다.

+0

서버가 토큰을 클라이언트에 되돌려 보내면 클라이언트가 어딘가에 저장하지만 위험하지는 않습니까 ?? 또한, 우리가 유선에서 토큰을 서버로 전송할 때마다 누군가가 요청을 가로 챌 위험이 있습니까? – Noor

+1

클라이언트가 메모리에 토큰을 저장하면 다른 값을 메모리 (또는 브라우저 쿠키)에 저장하는 것만 큼 안전합니다. 유선에서 토큰을 전송하는 것은 쿠키를 전송할 때와 동일한 보안 문제가 있습니다 (문제 설명문에서와 같이). 이러한 모든 제한 사항은 OAuth 기반 API 액세스에서 처리되었습니다.이것이 본질적으로 의미하는 바는 SHA1/MD5를 사용하여 auth 토큰과 paramswith 요청을 서명하고 다른 인수로 체크섬을 포함시키는 것입니다. 서버는 인증 토큰을 알고 있으므로 체크섬을 다시 계산하여 제공된 토큰과 비교할 수 있습니다. – sangupta

+1

따라서 인증 토큰은 클라이언트로 다시 전송되지 않습니다. 사용자 이름과 토큰을 사용하여 계산 된 체크섬이 함께 제공됩니다. 토큰이 손상 될 수있는 유일한 곳은 권한 부여 중에 서버에서 클라이언트로 전송되는 동안이므로 HTTPS를 통해 토큰을 사용하는 것이 안전합니다. – sangupta