Мой чековый принтер Epson TM-T88V-i пытается получить данные XML с URL-адреса сервера, для которого требуется, чтобы принтер аутентифицировался с помощью дайджеста HTTP. (эта функция Epson называется "Server Direct Print ")
С веб-консоли принтера я могу отправить тестовый запрос на сервер, но дайджест-аутентификация HTTP не работает. То же самое произойдет, если я позволю принтеру попытаться аутентифицироваться на сервере.
Если я попытаюсь получить доступ к URL-адресу через браузер, появится поле имени пользователя и пароля HTTP-дайджеста, и если я введу учетные данные, XML будет отображаться в браузере, как ожидалось. Это показывает, что механизм дайджеста HTTP на стороне сервера настроен правильно (я использую PHP-фреймворк Symfony 2.8).
На стороне сервера я вижу следующую информацию журнала:
Шаг 1
[2016-04-03 16:33:01] security.INFO: возникла исключительная ситуация AuthenticationException; перенаправление к точке входа аутентификации. {"исключение": "[объект] (Symfony \ Component \ Security \ Core \ Exception \ AuthenticationCredentialsNotFoundException (код: 0): токен не был найден в хранилище TokenStorage. в /home/.../src/Symfony/Component/ Безопасность / HTTP / Брандмауэр / AccessListener.php: 53) "}
Шаг 2
[2016-04-03 16:33:01] security.DEBUG: Вызов точки входа для аутентификации.
Шаг 3
[2016-04-03 16:33:01] security.DEBUG: Дайджест заголовка авторизации, полученный от пользовательского агента. {"header": "username = \" printer \ ", realm = \" example \ ", nonce = \" MTQ1OTk5Mzk4MS40NjQ3OmI0OTVmN2ZkZTlhYmE1NmNjNDIxNmIxMWU0OGVmYjUz \ ", urij \" \ "/ export , qop = \ "auth \", response = \ "c6ad88607624efd17f7de602f6ee9def \" "}
Шаг 4
[2016-04-03 16:33 : 01] security.DEBUG: Получен неожиданный ответ от DigestAuth; заголовок возвращает пароли в виде открытого текста? {"Ожидаемый": "741bff6abed513b6948c26eae529b6b6", "Received": "c6ad88607624efd17f7de602f6ee9def"}
Шаг 5
[2016-04-03 16:33:01] security.INFO: Ошибка дайджест-аутентификации. {"исключение": "[объект] (Symfony \ Component \ Security \ Core \ Exception \ BadCredentialsException (код: 0): неправильный ответ на /home/.../src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener .php: 107) "}
Файл журнала сообщает нам, что происходит на стороне сервера:
На шаге 1 + 2 Epson пытается получить доступ к URL-адресу сервера, который защищен дайджестом HTTP, и сервер отправляет ответ 401 «неавторизованный» с одноразовым номером (мы не видим этого в этом файле журнала).
На шаге 3 Epson отправляет дайджест-запрос авторизации клиента HTTP, включая все необходимые данные. Параметр response содержит хэш, который должен быть сгенерирован из других параметров авторизации.
На шаге 4 мое приложение symfony 2.8 сообщает, что параметр хешированного ответа, который был отправлен Epson на шаге 3, не тот, который ожидался процессом дайджеста HTTP.
Шаг 5, наконец, показывает, что аутентификация дайджеста HTTP не удалась.
Насколько я понимаю, процесс дайджест-аутентификации (как описано в wikipedia) правильный , за исключением того, что Epson не вычисляет правильный хэш в своем запросе аутентификации.
Кто-нибудь знает, почему Epson отправляет неправильный параметр ответа или кто-то заставил этот сценарий работать?