在IIS开启了windows身份验证,关了匿名
在web.config加了
<authentication mode="Windows"/>
<identity impersonate="true"/>
让程序模拟客户端登录的身份
问题就处在这,程序一直不能用IIS传过来的身份执行,所以很多地方用windows身份认证的地方就有问题,比如连接数据库
我用User.Identity.Name检测过确实是Client端登录时的帐号,但是程序却不用这个身份跑
如果我是这样写<identity impersonate="true" userName="xxxx" password="xxxxx"/>
程序就会照这个身份跑,一切都没有问题,不管在哪台机器登录都可以,只是每次都是这个用户所以不知道问题处在哪,望各位大侠帮忙

解决方案 »

  1.   

    1.让域管理员设置域内所有机器允许Kerberos委派
    2.单独为这台IIS机器设置Kerberos委托方法:域管理员进入ADUC(Active Directory Users and Computers)寻找当前你IIS所在的机器,找到后在委派(delegation)选项下选择trust this computer for delegation to any services原因:你的IIS要连接数据库相当与要以你IIS服务器要访问数据库,可是域不信任,你必须让域控制器允许你的IIS机器模拟你客户端(打开浏览器的一方)的身份去域验证(才能访问其他网络资源)
      

  2.   

    我以为这样写<identity impersonate="true"/> 程序就会去模拟User.Identity.Name这个身份了,原来还要设置如果我把网站做成安装包,用户装了之后,还是需要自己手工设置Kerberos才能让网站正常执行,是这个意思么?
      

  3.   

    还有一个觉得很奇怪的地方,当browser,web server同一台机器时,我用firefox工作不正常,用ie是正常的 
      

  4.   

    还有一个觉得很奇怪的地方,当browser,web server同一台机器时,我用firefox工作不正常,用ie是正常的 
      

  5.   


    其实连接数据库最好还是指定一个帐号密码比较好,你上面的设置意味着任何域用户能访问IIS就能访问数据库,所以他们可以用management studio直接连接到数据库(只要选域认证就行),这样不安全
      

  6.   


    只有IE支持集成认证的,因为他会将你登陆到计算机时候的token传递出去验证,其他的浏览器必须再输入一次你的凭证才可以
      

  7.   

    可是firefox我再输入一次我登录到计算机的帐号,程序运行还是不正常,这就是奇怪的地方
      

  8.   

    没有理解这句话的意思,我对<identity impersonate="true"/>的理解是,如果用户用aaa登录网站,那么连接数据库选择windows身份验证的话,程序就会用aaa去匹配,还有就是我的程序不单单是连接数据库,还有连接其他server,也要用到windows身份验证登录,所以必须提供,用密码登录的话就没有这么多问题了
      

  9.   

    我现在iis跟sql server在同一台机器上,应该只要模拟,不需要委托才对,但是也不成功,只有一种情况成功,就是在iis的机器上用IE才能成功
      

  10.   


    除非你的IIS机器就是你们的域服务器才不需要开委派,而不是SQL server和IIS在一台服务器,记住认证的地方是AD域控制器