我试图从IIS7(webadmin)上的
Windows 2008 serer上运行的经典asp站点写入服务器(web05)上的文件.这会失败,web05会在保存操作过程中记录匿名登录尝试.
Webadmin的站点以经典模式在应用程序池上运行,域用户作为进程帐户.进程帐户具有“信任此用户以委派任何服务(仅限Kerberos)”的权限.这同样适用于web05和webadmin服务器.
该网站正在使用Windows身份验证,我的想法是,当我使用我的域用户登录该站点时,我的用户的权限应该定义我在IIS站点的上下文中可以执行的操作.如果我打开基本身份验证,一切正常.
我还使用setspn.exe为URL添加SPN.如果我输入setspn.exe -L webadmin,我会得到:
HTTP/webadmin.companyname.com TERMSRV/webadmin TERMSRV/webadmin.companypub.local HOST/webadmin HOST/webadmin.companypub.local
所以据我所知,SPN设置正确.
如果我在执行保存操作时在webadmin上运行processmonitor,它会说该进程确实冒充我的域用户 – 但是获得“拒绝访问”(正如我之前所说,web05记录匿名登录尝试).
知道是什么原因引起的吗?
亲切的问候,
西蒙
解决方法
听起来像你对模仿有点困惑.该过程不会模拟域用户帐户,只是作为该用户运行.它们是有区别的.
当请求到达ASP时,它将模拟用户,处理请求的线程将在模拟用户的安全令牌下运行.很有可能在多个线程中模拟多个不同用户的相同进程.在启用匿名用户访问的大多数情况下,此用户是访客级别IUSR帐户.最有可能的是,在此用户下,您的代码正在尝试并且无法运行.
但是,如果为正在访问的资源关闭匿名或者IUSR帐户无权访问该资源,则会返回a 401响应,并指示它将接受哪些身份验证协议.然后,浏览器可以尝试使用当前用户凭证来认证连接,或者请求来自用户的一些凭证.
您没有准确指定尝试保存文件的方式.值得指出的是几件事.
> ASP代码执行可能随后导致拒绝访问将不会使用上述机制来尝试解析用户.>一旦连接被认证,它通常会继续被重新用于后续请求(这对于HTTP是“无连接”协议的知识是反直觉的).