管理员的奇怪IIS授权问题

时间:2009-09-21 08:04:49

标签: asp.net iis authorization

我正在使用VSTS 2008 + C#+。Net 3.5 + IIS 6.0 + Windows Server 2003 Enterprise x64 SP2 + ASP.Net。我在IIS网站中使用任何身份验证+ Windows身份验证模式,并在任意帐户中将用户身份映射到mycorp \ george,并使用mycorp / george运行IIS工作进程。我还将mycorp \ george添加到IIS Web服务器计算机的管理员组。 “mycorp”是我部门正在使用的(Windows Active Directory)域名。

当使用帐户mycorp \ george从另一台计算机访问网站时,我总是遇到未经授权的错误(401)(但从本地计算机访问网站访问网站时没有错误。)该网站是一个共享点网站使用Share Point Service 3.0。

我还使用IIS身份验证和授权工具来进行诊断,这是我使用的工具http://www.microsoft.com/downloads/details.aspx?familyid=63AAF167-2138-4231-B6ED-56298044BD3B&displaylang=en

此工具报告类似的身份验证和授权问题,

mycorp \ george帐户没有从网络权限访问此计算机路径:W3SVC / 1670937635 / ROOT 进行AuthType:匿名  服务器的响应:HTTP / 1.1 401访问被拒绝 了解IIS状态代码路径:W3SVC / 1670937635 / ROOT AuthType:匿名

任何想法有什么不对?我认为对于像mycorp \ george这样的管理员帐户,该帐户应该没有权限(身份验证和授权)限制问题。

提前谢谢, 乔治

3 个答案:

答案 0 :(得分:2)

有多种可能的问题:

1。如何配置远程访问本地帐户。

系统是域还是工作组?如果在工作组中,除非您更改它,否则管理员帐户的所有远程访问都将被禁用(它们将被视为来宾)。

您可以在本地安全策略中更改此内容:

  • 从开始|运行secpol.msc运行
  • 转到本地政策|安全选项
  • 选择设置“网络访问:本地帐户的共享和安全模型”
  • 确保将其设置为“经典:本地用户自行验证身份。”

(解释标签提供了更多详细信息。)

secpol时,还要检查您是否正在审核帐户登录信息。

2。 ISS身份验证设置

虚拟目录的身份验证设置是什么?是否启用了匿名访问?是否启用了Windows身份验证?

如果您正在审核帐户登录事件,请检查安全事件日志,以查看在用户通过身份验证时应该发生的登录。

3。文件系统的权限是什么

远程用户(对于Windows身份验证)或工作进程标识(对于匿名用户)是否具有对文件系统对象的读取权限?

使用Process Monitor查看是否正在访问文件(或尝试访问它们),这应该有助于查看IIS是否在内部生成未经授权的错误或用于从文件系统拒绝访问。

4。回到错误

  

HTTP / 1.1 401访问被拒绝了解IIS状态代码路径:W3SVC / 1670937635 / ROOT AuthType:Anonymous

这似乎是说客户端未被授权为Windows帐户。这似乎是需要关注的领域。如果客户端浏览器在服务器盒上运行,你会得到相同的信息,不同的盒子怎么样,不同的浏览器怎么样?是否为适用区域配置了IE以允许Windows身份验证?

答案 1 :(得分:1)

  • AD中是否有重复的SP(服务主体名称)寄存器?
  • 您是否已开启代表团。我之所以认为这可能是一个问题,是因为你看到它显示为404,因为如果你没有启用委托,并且服务主体注册它会使你的DC(域控制器)获得好处的时刻失效票,因此404.

如果你认为它可能与此有关,我可以进一步扩展如何跟踪它。如果您有安全的环境,这可能是问题吗?

最诚挚的问候 Rihan Meij

答案 2 :(得分:0)

如果您不想阅读作为网络管理员的开发人员,并认为安全性应该是解决方案的一部分,而不是想到跳到最后部分。

我会检查一些快速的事情,我在使用Microsoft CRM时发现了类似的问题。这些产品共享的是集成身份验证。我100%同意你这不是一个权限问题,但也许这是一个身份验证问题。

我只是想直截了当地说明一些事实,如果这些假设不正确,我可能会对此有所了解。

  1. 您的应用程序池正在网络服务下运行
  2. 您需要有效的目录身份验证才能使网站正常运行
  3. 您正在访问远程计算机上的资源。 (如果您在同一台计算机上访问Web服务但在不同的应用程序池下运行,则计入远程计算机)
  4. 您尝试过使用SQL身份验证之类的东西,但您使用的应用程序对此并不满意,并拒绝使用?
  5. 按顺序发生我认为正在发生的事情。

    1. 客户端(浏览器)使用默认的anonymouse凭据向IIS上的库存标准http发出请求。
    2. 服务器发送回404和chalenge响应,简而言之,就像我理解的那样,“离开,直到你可以给我一个正确的身份验证令牌,或者我把它当作一把钥匙”
    3. 浏览器放弃,并传递从浏览器LSASS服务获得的“密钥”(一些非常复杂的谈话和与某些域控制器协商以达到此目的)
    4. 服务器使用密钥接收新请求,然后将此密钥传递给域控制器并询问,如果密钥有效,并且应该能够执行必须执行的所有操作(ntfs权限所有这些好东西) )
    5. 到目前为止,一切都是极好的并且效果很好,但随后出现了障碍。
    6. 为了呈现页面的html,服务器需要一些远程资源(数据库,webservice),但远程资源也设置为使用集成身份验证并要求有效的“密钥”
    7. 但是此时此过程在服务器上以网络服务的凭据运行,并将网络服务凭据提供给“远程”机器,其中您需要完成该过程的内容将导致权限被拒绝,因为当网络服务凭证通过网络时,它就变成了机器帐户,所以即使我们确实让机器帐户访问了资源,它仍然不是你想要的。
    8. 所以你可以做的是在web.config
    9. 中打开模仿

      也许在这个时候我应该停下来,因为我正在基于这个假设。

      快速测试

      测试我刚刚输入的所有内容的快速方法是,将您的应用池运行的凭据更改为您知道可以访问的域用户名密码。这只是为了检验我的假设。如果这样可行,我可能会走上正轨,但我们先看看,所以我不会浪费你的时间。