HTTP Authentication 구현 관련 .(RFC 2671)
HTTP Authentication 을 구현하고 있습니다.(RFC 2671)
그런데, 좀 이해되지 않는 부분이 있어 질문 드립니다.
일단 Basic authentication은 구현을 마쳤습니다만,
digest authentication은 구현이 쉽지 않네요.
궁금한 점은, nc(nounce-count)를 어떻게 정하느냐 하는 것입니다.
제가 생각한 시나리오는,
1) client가 request를 보낸다.
2) server가 401 unautherization 와 함께 nounce값을 보내준다.
3) 만약 server로 부터 받은 header에 qop값이 setting되어 있으면 nounce가 예전에 사용된 것인지 확인하고, 사용했었다면, nc를 1 증가시킴다.
일단 이정도로 진행되는 듯 한데요, 3번이 좀 모호합니다.
---------------질문
server가 401 unautherization message를 response message를 보낼때면 항상 nounce가 resetting되는 것이 아닌가요?
항상 resetting된다면, 왜 nounce-count가 있어야 하는지요?
만약 resetting되는 것이 아니라면(reponse message마다 nounce가 다르지 않고 같은 놈이 올수도 있다면) 어떤 기준으로 nounce-count를 계산해야 하는지요.
session이 끊어지면 무조건 nounce-count를 초기화 시키고, session이 끊기지 않았다면, 401 message가 올때마다 그동안 사용한 nounce를 모두 검사해야 하는지요.
또, stale은 왜 있는 것인가요? 이전 request message가 인증에 실패했다는 것을 알려주기 위한 것이라면, 403 code만으로도 알려 줄 수 있을 것 같은데 말이죠.
------------
아직 정확히 이해하지 못해서 이런 질문을 드리게 되는 것 같습니다. 전반적으로 이해할 수 있도록 설명 부탁드립니다.
서버가 한번 준 nonce
서버가 한번 준 nonce 값을 클라이언트가 여러번 쓸 수도 있습니다. 물론 서버에 따라 이 것을 허용하지 않고 다시 401 응답을 줄 수도 있습니다.
서버로부터 새로운 nonce를 받으면 nonce-count를 초기화하면 됩니다. nonce-count는 replay 공격을 막기 위한 것으로 나와있습니다.
stale은 username/password는 맞는데 nonce가 무효한 경우 주는 것으로 나와있습니다. 즉 사용자로부터 새로운 username/password를 입력받을 필요는 없고 새로 받은 nonce값으로 다시 계산해서 요청하면 된다는 것입니다.
그렇다면 시나리오는..
한가지 명확하지 않은 것이 있는데요, 동일 서버가 준 nonce값을 클라이언트가 여러번 쓸 수 있다고 했는데,
그렇다면 서버가 401 response를 보낼때 nonce header가 빠질수도 있다는 뜻인지요? 아니면, 동일한 nonce값을 다시 한번 보낼 수도 있다는 것인지요.
만약 전자라면, nonce값을 저장하고 있어야 하는것일꺼고, 후자일 경우도 역시 nonce값을 저장하고 그 사용 cnount까지 가지고 있어야 한다는 의미처럼 이해되네요.
좀더 자세히 알려주실 수 있는지요.
그리고 stale은
client가 서버에게 request 를 보내면, 서버는 401 response message와 함께 nonce를 보내오고, 해당 nonce값으로 계산을 해 다시 request를 보냈을 때,
nonce값이 잘못된 경우에 다시 401 response message에 stale header를 추가해 보내온다는 의미로 이해하면 되겠습니까??
아리송한 부분이 많네요.
답변 부탁드립니다.
그리고 한가지 더
이 Authentication 과정을 test할 수 있는 server가 있을 까요?
아니면 간단하게 구현할 수 있는 방법은 어떤것이 있을까요.
서버가 같은 nonce
서버가 같은 nonce 값을 여러번 준다는 것이 아니라 서버가 한번 준 값을 클라이언트가 계속 사용하도록 허용할 수 있다는 것입니다.
서버가 nonce 값에 대해 사용기한을 둘 수 있습니다. 클라이언트가 사용기한이 지난 nonce 값을 사용해서 요청을 하면 서버가 username/password는 일치하지만 nonce의 사용기한이 지났을 때 stale을 반환해서 클라이언트가 새로운 nonce 값을 받아서 다시 요청하도록 하는 것입니다.
아파치에도 digest auth.
아파치에도 digest auth. 모듈이 있습니다만 저도 테스트해보지는 않았습니다.
http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html
네 답변 감사합니다.
조금더 살펴봐야겠습니다.
답변 감사드립니다.
댓글 달기