Можно ли использовать дайджест-аутентификацию с XMLHTTPRequest? - PullRequest
7 голосов
/ 23 августа 2011

У меня простой вопрос: возможно ли использовать дайджест-аутентификацию с запросом XMLHTTP?

Если ответ отрицательный, какова техническая причина?Или, если это возможно - как я могу это сделать?

Большое спасибо ... У Google пока нет хорошего ответа: - /

РЕДАКТИРОВАТЬ:

Спасибо за ответы,Изменение заголовка для соответствия схеме дайджест-аутентификации после получения одноразового номера кажется решением.

Но я действительно искал, что я могу изменить свой текущий вызов: xmlhttp.open («GET», url, false, имя пользователя, пароль);к чему-либонапример, xmlhttp.open («GET», url, false, имя пользователя, пароль, «DIGEST»);

Это также часть моего первоначального вопроса: почему метод open не предлагает возможность сделатьdigest-request?

Может быть, есть js-lib, который можно порекомендовать, который позволяет мне сделать это - как вы понимаете, я действительно не хочу менять один простой xmlhttp.open на несколько запросов и сначала получитьодноразовое значение.

Ответы [ 6 ]

8 голосов
/ 23 августа 2011

Вы можете сделать это без проблем. Просто следуйте частям спецификаций, которые вам нравятся;)
http://tools.ietf.org/html/rfc2617
и все, чего вам не хватает, чтобы начать писать свою библиотеку аутентификации
http://pajhome.org.uk/crypt/md5/
на сторона клиента.

предварительно обменяйте имя пользователя и пароль
Эй, я хочу аутентифицировать ----> сервер
Хорошо, это одноразовый номер / соль ----> клиент
вот md5 хэш сумма моей временной метки имени пользователя и пароля -----> сервер
Я просто использовал ваш пароль и имя пользователя так же, как и вы, и они одинаковые -----> client
Это основные принципы.

Я пропустил, что вам нужно включить URI запрашиваемого ресурса в хэш-сумму !!!!
Конечно, вы делаете это с каждым запросом к ресурсу на сервер таким образом, что кто-то, перехватывающий хеш, может только просматривать запрошенный вами контент и не может сделать запрос на другой ресурс. Этот метод не обеспечивает доступ к данным просто к этому.

6 голосов
/ 02 ноября 2012

Взгляните на эту статью: http://marcin -michalski.pl / 2012/11/01 / javascript-digest-authentication-restful-webservice-spring-security-javascript-ajax / .В нем объясняется, как сделать клиент JavaScript для дайджест-аутентификации с помощью SpringSecurity на стороне сервера.Код доступен в github: https://github.com/Arrowgroup/JSDigestAuth

3 голосов
/ 17 декабря 2012

Я написал полный рабочий процесс для этого, это совсем не сложно, если вы используете внешнюю библиотеку для MD5 (я использую Crypto-js).

Самая большая проблема, с которой вы можете столкнуться, - этоПервый сервер 401 ответит, что любой из наиболее часто используемых браузеров откроет диалоговое окно для получения ваших учетных данных.Насколько я видел, не существует простого способа обойти это: Как я могу закрыть диалоговое окно аутентификации браузера?

Чтобы решить его, я изменил веб-сервер, который я кодировал из C #Проект Codeplex.По первому запросу клиент передает заголовок «Warning», в котором говорится «Не поднимать 401».Сервер создает запрос и отправляет его обратно с нестандартным HttpException, отличным от 401 (на данный момент я использую 406, что «неприемлемо» в HTTP).Клиент создает хэш и отправляет его обратно.

Я могу опубликовать некоторые фрагменты кода, если кому-то интересно, это старый вопрос.

0 голосов
/ 26 февраля 2019

Чтобы избежать диалога аутентификации браузера по умолчанию, вы просто устанавливаете WWW-Authenticate как Digest / YourString (например, ваше царство). Это все в первом ответе, не так трагично. Мой собственный код работал до вчерашнего дня, и теперь я пытаюсь отладить что-то странное, что случилось внезапно, все еще пытаясь понять ..

0 голосов
/ 06 октября 2018

Вы действительно не должны заботиться о том, какой метод аутентификации использует сайт, если ваш браузер поддерживает его.

Если вы указываете имя пользователя и пароль для открытия метода и не связываетесь с заголовком Authorization, XMLHttpRequest.send() сначала попытается отправить запрос без аутентификации, получить ответ 401 с заголовком WWW-Authenticate и повторить запрос, предоставив имя и пароль в соответствии с методом авторизации, запрошенным сайтом.

(хотя может быть какое-то дополнительное событиеобработчики уволены во время этого двухэтапного процесса).

0 голосов
/ 23 августа 2011

Лучший способ сделать это - использовать SSL.Я не думаю, что существует какое-либо другое безопасное решение (поправьте меня, если я ошибаюсь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...