2012-06-07 8 views
6

Przeczytałem wszystkie posty o uwierzytelnianie trawienia i próbuję, ale mam żadnego problemu, mam uzupełnienie z zaimplementowanym uwierzytelniania trawienia i z api javascript api próbuję uwierzytelnić.Skrypt ręczny uwierzytelniania JavaScript

Najpierw wykonuję POST xmlhttprequest na serwer (od pliku: // do localhost: 8111, więc mam problem z CORS, ale został rozwiązany), no, odpowiedź serwera z 401 i z nagłówkiem WWW-Authenticate z tego:

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

więc biorę ten nagłówek i zastosować uwierzytelnianie digest algorithm: Najpierw utworzyć 2 vars "cnonce" i "NC":

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

tworzę w moim dosłownym przedmiotem jest Parametr "uri" (w odpowiedzi serwera istnieją "do main ":?) biorę wartość" domain "i umieszczam w kluczu" uri "mojego obiektu.

potem, do algorytmu:

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 wykonać setRequestHeader ("Authorization" responseContentHeader); Więc ostateczny header, które wysyłają do serwera to:

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

Ale nie działa, serwer zwraca 401 ponownie, wszystkie nagłówki Cors są ok, więc to nie jest problem, uwierzytelnianie serwera digest jest testowany, zaloguj się przy użyciu Chrome, a nagłówek Autoryzacja, którą umieszcza jest taka sama (nie dotyczy to nonce jest inna).

Ktoś wydaje się być kimkolwiek, do czego zmierzam? Dzięki

Odpowiedz

3

Błędem było:

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