使用Javascript XMLHttpRequest的摘要身份验证

使用Javascript XMLHttpRequest的摘要身份验证,javascript,hash,xmlhttprequest,digest-authentication,Javascript,Hash,Xmlhttprequest,Digest Authentication,我正在尝试使用使用摘要身份验证的API进行身份验证 我正在向服务器发送POST请求,但返回的响应是HTTP 401被拒绝。这是来自服务器的WWW-Authenticate质询标头: (包括用于格式化的反斜杠,不在响应标题中) 使用此标头中的参数,我应用摘要身份验证算法并构建质询-应答标头: const HA1 = MD5("login:Guard:mypassword"); const HA2 = MD5("POST:/"); const authHash = MD5( HA1 + ':'

我正在尝试使用使用摘要身份验证的API进行身份验证

我正在向服务器发送POST请求,但返回的响应是HTTP 401被拒绝。这是来自服务器的
WWW-Authenticate
质询标头:

(包括用于格式化的反斜杠,不在响应标题中)

使用此标头中的参数,我应用摘要身份验证算法并构建质询-应答标头:

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"

但这不起作用,我仍然收到HTTP 401拒绝。服务器摘要身份验证已经过测试。

错误是用冒号指定了
用户名
参数,它应该是等号(
用户名:“login”
vs
用户名=“login”
):

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