Javascript摘要手动验证
我阅读所有关于摘要身份验证的帖子,我试图但我有任何问题,我有一个restlet与摘要身份验证实施,并与我试图验证的JavaScript API。
首先,我将xmlhttprequest POST发送到服务器(从file://到localhost:8111,所以我有CORS问题但已解决),以及服务器对401和WWW-Authenticate头的响应:
WWW-Authenticate:Digest realm="Guard", domain="/", nonce="MTMzOTA5Mjk1NTE2NDo0NzY2NjJiOTgyMjE1ZDc0OWU3NzM5MTkzMWNjNGQzNw==", algorithm=MD5, qop="auth"
所以我采取这个头,并应用认证摘要算法:首先创建2个变量,“cnonce”和“nc”:
tokensObj["cnonce"] = 'bd5fd9b093dccaa1'; (invented)
tokensObj["nc"] = '00000001';
我在我的文字对象中创建'uri'参数(在服务器响应中有一个“域”:?)我将'domain'的值放入我的对象的'uri'键中。
之后,我做了这个算法:
var HA1 = MD5("login:Guard:mypassword");
var HA2 = MD5("POST:/");
var authResponse = MD5(HA1 + ':' +
unquotes(tokensObj["nonce"]) +
':' +
tokensObj["nc"] +
':' +
tokensObj["cnonce"] +
':' +
unquotes(tokensObj["qop"]) +
':' +
HA2);
var responseContentHeader = 'Digest username:"login"' +', realm=' + tokensObj["realm"] +
', nonce=' + tokensObj["nonce"] +
', uri=' + tokensObj["domain"] +
', algorithm=' + tokensObj["algorithm"] +
', response="' + authResponse + '"' +
', qop=' + unquotes(tokensObj["qop"]) +
', nc=' + tokensObj["nc"] +
', cnonce="' + tokensObj["cnonce"] + '"';
我做了setRequestHeader(“授权”,responseContentHeader); 所以,发送给服务器的最终头文件是:
Authorization:Digest username:"login", realm="Guard", nonce="7d0c753c2fb4cdc9480403547952f1", uri="/", algorithm=MD5, response="e9d8ad8f04e42672f2c21d70257c1072", qop=auth, nc=00000001, cnonce="bd5fd9b093dccaa1"
但不起作用,服务器再次返回401,所有的CORS头文件设置正常,所以它不是问题,服务器身份验证摘要经过测试,使用Chrome登录并且它放置的头授权与我的相同(显然现时是不同的)。
有人似乎有什么我可能会去? 谢谢
错误是:
Authorization:Digest username="login", realm="Guard", nonce="7d0c753c2fb4cdc9480403547952f1", uri="/", algorithm=MD5, response="e9d8ad8f04e42672f2c21d70257c1072", qop=auth, nc=00000001, cnonce="bd5fd9b093dccaa1"
链接地址: http://www.djcxy.com/p/22289.html