HTTP Authentication 구현 관련 .(RFC 2671)

twins99의 이미지

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만으로도 알려 줄 수 있을 것 같은데 말이죠.

------------
아직 정확히 이해하지 못해서 이런 질문을 드리게 되는 것 같습니다. 전반적으로 이해할 수 있도록 설명 부탁드립니다.

kewlbear의 이미지

서버가 한번 준 nonce 값을 클라이언트가 여러번 쓸 수도 있습니다. 물론 서버에 따라 이 것을 허용하지 않고 다시 401 응답을 줄 수도 있습니다.

서버로부터 새로운 nonce를 받으면 nonce-count를 초기화하면 됩니다. nonce-count는 replay 공격을 막기 위한 것으로 나와있습니다.

stale은 username/password는 맞는데 nonce가 무효한 경우 주는 것으로 나와있습니다. 즉 사용자로부터 새로운 username/password를 입력받을 필요는 없고 새로 받은 nonce값으로 다시 계산해서 요청하면 된다는 것입니다.

twins99의 이미지

한가지 명확하지 않은 것이 있는데요, 동일 서버가 준 nonce값을 클라이언트가 여러번 쓸 수 있다고 했는데,
그렇다면 서버가 401 response를 보낼때 nonce header가 빠질수도 있다는 뜻인지요? 아니면, 동일한 nonce값을 다시 한번 보낼 수도 있다는 것인지요.

만약 전자라면, nonce값을 저장하고 있어야 하는것일꺼고, 후자일 경우도 역시 nonce값을 저장하고 그 사용 cnount까지 가지고 있어야 한다는 의미처럼 이해되네요.

좀더 자세히 알려주실 수 있는지요.

그리고 stale은

client가 서버에게 request 를 보내면, 서버는 401 response message와 함께 nonce를 보내오고, 해당 nonce값으로 계산을 해 다시 request를 보냈을 때,

nonce값이 잘못된 경우에 다시 401 response message에 stale header를 추가해 보내온다는 의미로 이해하면 되겠습니까??

아리송한 부분이 많네요.

답변 부탁드립니다.

twins99의 이미지

이 Authentication 과정을 test할 수 있는 server가 있을 까요?

아니면 간단하게 구현할 수 있는 방법은 어떤것이 있을까요.

kewlbear의 이미지

서버가 같은 nonce 값을 여러번 준다는 것이 아니라 서버가 한번 준 값을 클라이언트가 계속 사용하도록 허용할 수 있다는 것입니다.

서버가 nonce 값에 대해 사용기한을 둘 수 있습니다. 클라이언트가 사용기한이 지난 nonce 값을 사용해서 요청을 하면 서버가 username/password는 일치하지만 nonce의 사용기한이 지났을 때 stale을 반환해서 클라이언트가 새로운 nonce 값을 받아서 다시 요청하도록 하는 것입니다.

kewlbear의 이미지

아파치에도 digest auth. 모듈이 있습니다만 저도 테스트해보지는 않았습니다.

http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html

twins99의 이미지

조금더 살펴봐야겠습니다.

답변 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.