none
在windows 2008 R2 IIS7.5 中 如何模拟域用户身份执行asp.net 程序? RRS feed

  • 问题

  • 大致情况:

    CA服务器:server 2008 r2 / dns / ad 域服务 / ad 证书服务

    应用服务器: server 2008 r2 / IIS7.5 / .net framework 4.0 / vs10

    问题描述:在应用服务器上开发并部署asp.net 程序,用C#调用WebEnrlServer(scrdenrl.dll)枚举CA服务器上的证书模板。使用vs10自带的web服务器运行asp.net程序一切正常,能根据登录的域用户的帐号正确枚举到域用户可见的证书模板。(这段代码是将AD 证书服务的web前台的asp代码移植成C#代码)

    但将程序发布在应用服务器上的IIS7.5时,枚举到的模板数量为0。

    尝试过的解决方案一:

    参考官方文档:http://support.microsoft.com/kb/306158 ,按照提示开启iis7.5对应控制节点下的asp.net身份模拟和windows身份验证,并调用

    System.Security.Principal.WindowsImpersonationContext impersonationContext;
    impersonationContext =
        ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

    //Insert your code that runs under the security context of the authenticating user here.

    impersonationContext.Undo();

    试图模拟域用户的身份以获得权限执行枚举证书模板的代码,但仍然失败,枚举到的模板数为0。

    尝试过的解决方案二:

    设置iis7.5中对应于asp.net应用程序的应用程序池:高级设置->进程模型->标识,将其分别设置为内置账户的localService,localSystem,netWorkService,ApplicationPoolIdentity后进行测试,但仍然失败,枚举到的模板数为0。

    最后将 标识 设置为MyDomain\administrator 后 程序枚举到的模板数正常.

    但是这样并不是解决问题了,接下来我又重复《尝试过的解决方案一》中的操作,再次试图模拟除了administrator以外的域用户,但是不成功。

    希望解决的问题:

    在IIS7.5下能模拟已通过windows身份验证的域用户,使得进程获得域用户的对应权限以执行asp.net程序。

    谢谢!

    2012年8月30日 6:50

全部回复

  • 补充一点:

    在《尝试过的解决方案一》中((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();调用是成功的,通过调用前后两次

    response.write(system.security.principal.windowsIdendity.GetCurrent().name); 页面显示结果分别为

    IIS APPPOOL\MyAppPool

    MyDomain\user0

    可以看出Impersonate()产生了效果,但不知道在Impersonate()和Undo()之间的代码为什么顽固的以某个未知的身份所对应的权限来执行。

    2012年8月30日 7:06