2012-06-07 135 views
6

我閱讀所有關於摘要身份驗證的帖子,我試圖但我有任何問題,我有一個restlet與摘要身份驗證實施,並與我試圖驗證的JavaScript API。Javascript摘要手動身份驗證

首先,我做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'參數(在服務器響應中有一個「do」主「:?)我把'域'的值放在我的對象的'uri'鍵中。

之後,i執行的算法:

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"] + '"'; 

和i執行setRequestHeader( 「授權」,responseContentHeader); 所以,這向服務器發送的最後頭是:

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

但不是作品,服務器再次返回401,所有的CORS標頭設置好了,所以它是沒有問題的,服務器認證摘要進行測試,使用Chrome登錄並且它放置的標題授權與我的相同(顯然,隨機數是不同的)。

有人似乎有什麼我可能要去? 感謝

回答

3

的錯誤是:

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