2012-06-07 13 views
6
Authentifizierung

i lesen Sie alle Beiträge über Digest-Authentifizierung und ich versuche, aber ich habe kein Problem, habe ich eine Restlet mit dem Digest-Authentifizierung implementiert, und mit einem JavaScript-API zu authentifizieren, ich versuche.Javascript Digest manuell

Zuerst mache ich den xmlhttprequest POST zum Server (von file: // zu localhost: 8111, also habe ich das CORS-Problem, aber ist gelöst), nun, die Serverantwort mit dem 401 und mit dem WWW-Authenticate-Header mit diesem:

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

so nehme ich diesen Header und wenden die Authentifizierung Digest-Algorithmus: Erste 2 vars schaffen "cnonce" und "nc":

tokensObj["cnonce"] = 'bd5fd9b093dccaa1'; (invented) 
tokensObj["nc"] = '00000001'; 

ich in meinem wörtlichen Objekt erstellen die 'uri' Parameter (in der Serverantwort gibt es ein "do main ":?) ich nehme den wert von 'domain' und lege die 'uri' taste meines objektes ein.

nach, ich tue den Algorithmus:

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

, und ich tue das setRequestHeader ("Authorization", responseContentHeader); So , der letzte Header, der an den Server senden ist:

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

Aber nicht funktioniert, der Server die 401 wieder zurückgibt, werden alle CORS-Header ok gesetzt sind, so ist es nicht das Problem, der Server-Authentifizierung Digest ist getestet, Login mit Chrome und die Header-Autorisierung, die es setzt, ist die gleiche von mir (obviusly die Nonce ist anders).

Jemand scheint alles, was ich gehen kann? Dank

Antwort

3

Der Fehler war:

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