我们已经使用 isapi_redirect.dll 成功地将 IIS 配置为前置 2 个 Tomcat 实例。它做得很聪明,我们一直很开心。但是,现在我们正在使用其中一个 Tomcat 实例通过 AXIS 提供 Web 服务。这需要 BASIC Auth,并且 .NET 客户端失败。
+ .NET 客户端可以通过访问“site:8180”来绕过 IIS,而且它们没问题
+ Java 客户端可以访问 IIS 并且 ISAPI 将它们传递给它们,并且它们使用 basic 进行身份验证就可以了。
+ .NET 客户端访问 IIS 无法使用相同的 unpw 进行身份验证。
Fiddler 报告此 session :
HTTP/1.1 401 未经授权
日期:2009 年 1 月 7 日星期三 14:31:59 GMT
服务器:Microsoft-IIS/6.0
WWW-验证:NTLM
X-Powered-By: ASP.NET
Pragma:无缓存
缓存控制:无缓存
过期时间:美国东部时间 1969 年 12 月 31 日星期三 19:00:00
WWW-Authenticate: Basic realm="日常控制模块"
内容类型:text/html;charset=utf-8
内容长度:954
代理支持:基于 session 的身份验证
它启动了一个看起来像基本身份验证对话框的东西,但它没有要求我们对 Daily Control Module 进行身份验证,而是要求我们对 Windows 服务器进行身份验证。果然,IIS 服务器正在请求 NTLM 身份验证。如果我将整个服务器设置为使用 Basic Auth,我会从 Fiddler 获得:
HTTP/1.1 401 未经授权
内容长度:1656
内容类型:文本/html
服务器:Microsoft-IIS/6.0
WWW-Authenticate: Basic realm="serverName"
X-Powered-By: ASP.NET
日期:2009 年 1 月 7 日星期三 15:08:32 GMT
叹息。 Basic,不过现在Basic Realm改成了IIS服务器。所以,如果我将整个服务器设置为针对基本领域、日常控制模块进行身份验证,那么我会得到:
HTTP/1.1 401 未经授权
日期:2009 年 1 月 7 日星期三 15:11:45 GMT
服务器:Microsoft-IIS/6.0
WWW-Authenticate: Basic realm="日常控制模块"
X-Powered-By: ASP.NET
Pragma:无缓存
缓存控制:无缓存
过期时间:美国东部时间 1969 年 12 月 31 日星期三 19:00:00
WWW-Authenticate: Basic realm="日常控制模块"
内容类型:text/html;charset=utf-8
内容长度:954
双重 WWW-Auth header 很奇怪,不是吗?无论如何,无论我是否指定域,使用直接针对 Tomcat 的相同 unpw 进行身份验证都会失败。
此时:
+ 匿名关闭
+ 集成 Windows 身份验证已关闭
+ 基本身份验证开启,领域配置为日常控制模块
感谢观看。
最佳答案
目录安全的配置是什么?
您确定只启用了基本身份验证吗?
另外一点是。也许在 iis 级别你应该使用匿名身份验证。 tomcat 负责实现基本身份验证交换吗?
问题的根源(来自您发布的 header )是 .net 客户端识别该站点支持 ntlm 身份验证。并尝试使用该协议(protocol)进行身份验证。 Java 客户端只是忽略了 ntlm 选项,因此它使用站点支持的任何其他身份验证协议(protocol)。
您应确保未在站点和文件级别启用集成身份验证。
关于iis - 无法让 IIS ISAPI Tomcat 连接器将 BASIC 身份验证传递给 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/420693/