nin*_*sky 6 authentication digest epson digest-authentication symfony
我的Epson TM-T88V-i收据打印机尝试从服务器URL获取XML数据,该服务器URL需要打印机通过HTTP摘要进行身份验证.(此Epson功能称为" 服务器直接打印 ")
从打印机的Web控制台,我能够向服务器发送测试请求,但HTTP摘要认证失败.如果让打印机尝试在服务器上进行身份验证,也会发生同样的情况.
如果我尝试通过浏览器访问URL,则会出现HTTP摘要用户名+密码框,如果我输入凭据,XML将按预期显示在浏览器中.这表明服务器端的HTTP摘要机制设置正确(我使用的是PHP框架Symfony 2.8).
在服务器端,我看到以下日志信息:
步骤1
[2016-04-03 16:33:01] security.INFO:抛出了AuthenticationException; 重定向到身份验证入口点.{"exception":"[object](Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException(code: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 \",uri = \"/ export \",cnonce = \"MDAxNjM0 \",nc = 00000001 ,qop = \"auth \",response = \" c6ad88607624efd17f7de602f6ee9def \""}
步骤4
[2016-04-03 16:33:01] security.DEBUG:来自DigestAuth的意外响应; 标题返回明文密码? {"expected":" 741bff6abed513b6948c26eae529b6b6 ","已收到":" c6ad88607624efd17f7de602f6ee9def "}
步骤5
[2016-04-03 16:33:01] security.INFO:摘要认证失败.{"exception":"[object](Symfony\Component\Security\Core\Exception\BadCredentialsException(code:0):/home/.../src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener的响应不正确.PHP:107)"}
日志文件告诉我们服务器端发生了什么:
在步骤1 + 2中,Epson尝试访问受HTTP摘要保护的服务器URL,服务器发送带有nonce的401"未授权"响应(我们在此日志文件中没有看到此信息)
在步骤3中,Epson发送HTTP摘要客户端授权请求,包括所有必要的数据.所述响应参数包含散列应出其他授权参数来生成
在步骤4中,我的symfony 2.8应用程序说,Epson在步骤3中发送的散列响应参数不是HTTP摘要过程所期望的参数.
最后,步骤5显示HTTP摘要认证失败.
据我所知,摘要认证过程(如维基百科上所述)是正确的,除了Epson不在他的认证请求中计算正确的哈希值.
有谁知道为什么爱普生发送错误的响应参数或有人让这个场景工作?