Дайджест-аутентификация Javascript вручную

я прочитал все сообщения о дайджест-аутентификации и пытаюсь, но у меня есть проблемы, у меня есть рестлет с реализованной дайджест-аутентификацией, и я пытаюсь аутентифицироваться с помощью javascript API.

Во-первых, я отправляю xmlhttprequest POST на сервер (от file:// до localhost:8111, так что у меня есть проблема с CORS, но она решена), ну, ответ сервера с 401 и с заголовком WWW-Authenticate с это:

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

поэтому я беру этот заголовок и применяю алгоритм дайджеста аутентификации: Сначала создайте 2 vars, «cnonce» и «nc»:

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

я создаю в своем буквальном объекте параметр «uri» (в ответе сервера есть «домен» :?) я беру значение «домен» и введите ключ «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("Authorization",responseContentHeader); Итак, окончательный заголовок, который отправляется на сервер:

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

Но не работает, сервер снова возвращает 401, все заголовки CORS настроены нормально, так что это не проблема, дайджест проверки подлинности сервера проверен, логин с Chrome и заголовком Авторизация, которую он ставит, такая же, как и у меня (очевидно, одноразовый номер отличается).

Кому-то кажется, что я могу пойти? Спасибо

7
задан Pointy 7 June 2012 в 18:43
поделиться