IIS 7.5,URL Rewrite 2.0,Kerberos - 重写的URL返回401.1

时间:2014-01-14 10:28:47

标签: iis url-rewriting kerberos

我很感激有关以下问题的任何提示:

问题摘要:

在IIS 7.5中使用Negotiate:Kerberos时,授权正常工作,直到我们设置URL重写(使用MS模块“URL Rewrite 2.0”) - 任何重写的URL然后返回“401.1 Unathorized”(请求不匹配任何重写规则)继续工作)。

设置:

  • Windows Server 2008 R2 x64
  • IIS 7.5
  • 网址重写2.0

  • 服务器位于域

  • 对于HOST / hostname和HOST / hostname.domain(默认情况下创建)存在SPN
  • 池使用默认的ApplicationPoolIdentity(没有自定义帐户,不是网络服务)
  • 内核模式设置为OFF
  • 身份验证提供程序仅设置为“协商:Kerberos”(无NTLM或匿名)

  • 网址重写规则为“^(。*)/ $”=> “索引?X = {R1}”

结果:

1)当访问任何不匹配任何URL重写模式的URL时,Kerberos正常工作,即发出Kerberos票证(使用klist验证),发送(使用netmon和HTTP头验证)并接受(通过URL验证可访问和适当的AUTH_USER属性设置为我的域帐户名称)=>没问题。

2)访问任何匹配URL重写模式的URL时,例如“hostname / foo”的结果是:

HTTP Error 401.1 - Unauthorized
You do not have permission to view this directory or page using the credentials that you supplied.
Module  WindowsAuthenticationModule
Notification    AuthenticateRequest
Error Code  0x80070055
Requested URL   http://hostname/index?x=foo
Physical Path   D:\wwwroot\
Logon Method    Not yet determined
Logon User  Not yet determined

(如果我们尝试直接访问重写的URL,例如hostname / index?x = foo,Kerberos会再次正常工作)

到目前为止尝试解决这个问题:

谷歌搜索后,我们尝试了几种选择:

  • 打开内核模式:Kerberos使用默认池标识或网络服务完全停止工作(我想我们需要设置额外的HTTP SPN和/或使用自定义域帐户以及该帐户的附加SPN)
  • 打开“useAppPoolCredentials”:没有区别
  • 启用“失败的请求跟踪”:令人惊讶的是,无论我们尝试设置什么规则(例如400-999),这些失败的401.1请求都不会在失败日志中生成任何输出 - 文件夹只是空的(而其他错误,如当访问未重写的URL时,404或甚至握手401.x正在生成日志 - 非常奇怪)

结论:

到目前为止,我们已经达到了死胡同 - 它可能是一种奇怪的“双跃点”问题,需要使用自定义域帐户而不是默认的应用程序池标识,但是因为我们实际上访问的是相同的资源,所以看起来更像是一个URL Rewrite问题。

任何提示,提示,指示?任何事都会受到高度赞赏。

祝你好运, 马立克

2 个答案:

答案 0 :(得分:1)

我们面临与您相同的问题。通过启用扩展错误记录,我们能够指出实际问题,这似乎是重写模块中的错误(或者至少在IIS的某些部分,与模块有关):

  • 当URL被重写时,使用基本身份验证和NTLM检查对新重写URL的访问(看似硬编码),这两者都没有在网站上配置。唯一配置的身份验证提供程序是Kerberos。由于客户端不发送NTLM或基本凭证,因此无法使用。

我们(当前项目中的另一个人)正在向Microsoft发送此问题。当我得到任何结果时,我会通知你。

答案 1 :(得分:0)

好像你在这里有多个问题。

失败请求跟踪日志

要修复丢失的日志问题,必须确保运行站点的AppllicationPool的用户具有对生成这些日志的文件夹的读取/修改权限,否则您将看不到任何内容。请参阅此页面上标记为“启用失败请求跟踪”的部分:Troubleshoot Failed Requests Using Tracing in IIS 7

不清楚的是,网站的应用程序池标识(在应用程序池的高级设置中找到)是需要对该文件夹的读/修改权限的帐户。

修复后,您可以在IE中加载XML日志,并查看更清晰的情况。

401.1 - 未经授权的问题

对401错误的可能解决方法是确保在请求筛选中允许使用未列出的文件扩展名。转到IIS - >网站 - > [您的网站] - >请求过滤

这里有两个选项:

  1. 允许文件名扩展名...并添加值“。” (减去引号),请参阅this answer
  2. 编辑功能设置...并启用“允许未列出的文件扩展名”选项
  3. 第一个选项应该运行良好,第二个选项显然会打开一个大洞,但允许一切,所以你应该能够让它工作。

    我希望有所帮助。