2012-06-07 14 views
6

ho letto tutti i post sull'autenticazione digest e sto provando ma ho qualche problema, ho un restlet con l'autenticazione digest implementata e con una javascript api sto provando ad autenticare.Javascript digest autenticazione manuale

In primo luogo, faccio il POST xmlhttprequest al server (da file: // a localhost: 8111 quindi ho il problema CORS ma è risolto), beh, la risposta del server con il 401 e con l'intestazione WWW-Authenticate con questo:

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

così colgo l'intestazione e applicare l'autenticazione digest: Innanzitutto creare 2 Vars, "cnonce" e "NC":

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

ho creato nel mio oggetto letterale parametro 'uri' (nella risposta del server c'è un "do" main ":?) prendo il valore di 'domain' e inserisco la chiave 'uri' del mio oggetto.

dopo, faccio l'algoritmo:

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

e faccio la setRequestHeader ("Autorizzazione", responseContentHeader); Così, l'intestazione finale che inviare al server è:

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

Ma non funziona, il server restituisce il 401 ancora una volta, tutte le intestazioni CORS sono impostate bene, quindi non è il problema, l'autenticazione del server digest è testato, accedi con Chrome e l'intestazione L'autorizzazione che mette è la stessa della mia (ovviamente il nonce è diverso).

Qualcuno sembra che possa andare? Grazie

risposta

3

L'errore è stato:

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