9

ダイジェスト認証を使用するAPIで認証しようとしています。

サーバーにPOSTリクエストを送信していますが、返される応答はですHTTP 401 Denied。これはWWW-Authenticateサーバーからのチャレンジヘッダーです。

(フォーマット用にバックスラッシュが含まれていますが、応答ヘッダーにはありません)

WWW-Authenticate: Digest realm="Guard", domain="/", \ 
  nonce="MTMzOTA5Mjk1NTE2NDo0NzY2NjJiOTgyMjE1ZDc0OWU3NzM5MTkzMWNjNGQzNw==", \ 
  algorithm=MD5, qop="auth"

このヘッダーのパラメーターを使用して、ダイジェスト認証アルゴリズムを適用し、チャレンジ応答ヘッダーを作成します。

const HA1 = MD5("login:Guard:mypassword");
const HA2 = MD5("POST:/");

const authHash = MD5(
  HA1 + ':' + unquotes(tokensObj["nonce"]) + ':' +
  tokensObj["nc"] + ':' + tokensObj["cnonce"] + ':' +
  unquotes(tokensObj["qop"]) + ':' + HA2
);

const challengeReply = 'Digest username:"login"' +
  ', realm=' + tokensObj["realm"] + ', nonce=' + tokensObj["nonce"] +
  ', uri=' + tokensObj["domain"] + ', algorithm=' + tokensObj["algorithm"] +
  ', response="' + authHash + '"' + ', qop=' + unquotes(tokensObj["qop"])  +
  ', nc=' + tokensObj["nc"] + ', cnonce="' + tokensObj["cnonce"] + '"';

xhr.setRequestHeader("Authorization", challengeReply);

サーバーに送信されるヘッダー:

Authorization: Digest username:"login", realm="Guard", \
  nonce="7d0c753c2fb4cdc9480403547952f1", uri="/", algorithm=MD5, \
  response="e9d8ad8f04e42672f2c21d70257c1072", qop=auth, nc=00000001, \
  cnonce="bd5fd9b093dccaa1"

しかし、これは機能しません。HTTP401拒否を受け取ります。サーバーダイジェスト認証がテストされました。

4

1 に答える 1

4

間違いは、usernameパラメータをコロンで指定することでした。等号(username:"login"vs username="login")である必要があります。

Authorization: Digest username="login", realm="Guard", nonce="7d0c753c2fb4cdc9480403547952f1", uri="/", algorithm=MD5, response="e9d8ad8f04e42672f2c21d70257c1072", qop=auth, nc=00000001, cnonce="bd5fd9b093dccaa1"
于 2012-07-05T20:48:22.637 に答える