Windows身份validation到Intranet环境中的远程服务器

在我公司的Intranet环境中,我有几台服务器(都在同一台DC上)。 为了简单起见,我将把我的问题集中在IIS和SQL服务器上。 我在域上的另一台机器上有一个IIS 7.5 Web服务器和一个远程SQL Server 2005。

以下是我希望达到的要求:

  • IIS服务器上的Web应用程序应使用某种forms的身份validation(可能是Windows身份validation),以便用户无需进行身份validation,因为它将在loginWindows计算机时使用其networking用户凭据。
  • 理想的情况下,身份validation方法也应该通过VPN连接支持到networking中。
  • 应将用户标识(Principal)传递到远程SQL Server上,以便在该服务器上的查询将能够标识用户,以便根据用户名来支持授权。 例如,查询select suser_sname()应该通过IIS Web应用程序将执行操作的人员的实际用户名返回给数据库。
  • 该解决scheme应至less与networking上的SQL Server和UNCpath一起工作。
  • 高度可靠和未来的certificate(即最佳实践)。

我花了至less几个星期(累计)研究这个过去几年,因为我有时间,但没有效果。 请首先帮助我理解,如果能够满足这些要求(因为我有理由相信这一点),请指出我在“如何”做到这一点的正确方向,以及我应该如何解决这个问题。

我到目前为止所做的:

  • 我有一个testing应用程序是唯一启用Windows AuthenticationType报告Kerberos AuthenticationTypevalidationtypes。
  • Windows身份validationconfiguration为使用“协商”作为提供程序,还需要启用内核模式的扩展保护。
  • 应用程序池在集成模式下使用.NET 4.0。
  • 应用程序池标识是我们注册为SPN的自定义域帐户。
  • AD服务器启用了委托,但SQL Server没有。

我已经能够完成的最好的事情是确认Kerberos http标题的存在,但是我的testing应用程序显示应用程序池的自定义用户(SPN帐户)正在通过,而不是我自己的。 这里是我的testing应用程序的结果,如果你喜欢:

 Result Field Description Test App Code ------ ----------------- ------------- Negotiate Page Authentication Type Page.User.Identity.AuthenticationType <dc>\<username> Page Identity Page.User.Identity.Name Kerberos Principal Windows Auth Type WindowsIdentity.GetCurrent().AuthenticationType <dc>\<spnUser> Principal Windows Identity WindowsIdentity.GetCurrent().Name <dc>\<username> HttpContext User HttpContext.Current.User.Identity.Name <dc>\<username> Server Var "LOGON_USER" Request.ServerVariables("LOGON_USER") <dc>\<username> Thread Current Principal Threading.Thread.CurrentPrincipal.Identity.Name