我在Chrome 51.0.2704.63中使用Postman 4.4.1。我已经使用Tomcat6设置了一个web项目,web.xml就像:
<web-app>
<display-name>Archetype Created Web Application</display-name>
<security-constraint>
<web-resource-collection>
<web-resource-name>
My App
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>tomcat</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>DIGEST</auth-method> <!-- DIGEST here -->
<realm-name>My Realm</realm-name>
</login-config>
</web-app>
当我访问http://localhost:8080/simple-web/使用我的本地浏览器时,会弹出一个窗口让我输入用户名和密码。填充后,效果很好。
当我使用Postman时,我在授权页面输入用户名和密码,然后选择带有Digest Auth
的类型。它总是显示给我401 Unauthrized。
我可以看到标题:
Cache-Control →no-cache
Content-Length →954
Content-Type →text/html;charset=utf-8
Date →Fri, 29 Jul 2016 10:26:20 GMT
Expires →Thu, 01 Jan 1970 08:00:00 CST
Pragma →No-cache
Server →Apache-Coyote/1.1
WWW-Authenticate →Digest realm="My Realm", qop="auth", nonce="dcb71e7d6766f85c3f233b7b74e42423", opaque="4894d1ece1380278a451585e9b548e21"
有人知道原因以及如何解决它吗?
答案 0 :(得分:0)
从一开始我使用了一个带有摘要身份验证的两步流程构建请求,构建来自Firebug的请求并发送它并将401副本的nonce,有时不透明地复制到摘要字段中并重新发送以获得成功。 在论坛上的讨论让我相信它仍然是一个问题。我正在使用5.1.2 Windows App。 当我粘贴网址并获得预期的响应时,我模拟了我在Firebug中看到的初始请求。
答案 1 :(得分:0)
最新答案,但由于我的团队对此也很挣扎,因此请将其发布在这里,而这只是仔细阅读文档的问题。
(..)服务器使用一些详细信息进行响应,包括只能使用一次(一次)的数字,领域值和401未经授权的响应。然后,您将发送回加密的数据数组,其中包括用户名和密码以及在第一个请求中从服务器接收到的数据。
由于在提供的输出中已经可见,因此确实为您提供了随机数,qop和不透明值。因此,在最初的请求获得401响应之后,您将创建另一个请求,该请求与上一个请求几乎相同,只是设置了额外的现时值,qop和不透明值。