2016-01-25 29 views
1

我已经阅读了许多博客,许多文章都与如何让我的IIS服务器将经过身份验证的用户传递给SQL有关。然而,我坚持我需要什么来设置我的SPN。这里是我的设置...ASP.NET模拟场景。 IIS 8.5到SQL 2012,需要设置哪些SPN?

IIS:
应用程序池的.Net 4.0版
综合Pipepline
身份=网络服务

认证:
ASP.NET模拟= true(启用)
Windows身份验证启用
提供商协商=:Kerberos的
禁用内核模式认证

IIS SERVER:
为委派信任的任何服务(仅Kerberos的)

SQL SERVER:
为委派信任的任何服务(仅Kerberos的)

从我使用这些设置,我应该传球的理解Windows帐户,我目前登录到IIS服务器,它应该将该令牌传递给SQL来验证我。但是,它只是不断地提示我一个用户/站点的传递。

我发现这篇文章http://blog.reveille.org.uk/2010/01/asp-net-impersonation-delegation-2/,告诉我,我需要设置SPN的“机器”使用这样的事情:

setspn -A HTTP/[dns name of the site] [machine name] 

我不确定到底是什么SPN(S)我需要的。任何人都可以帮我吗?我想这件事情就像

setspn -A HTTP/mywebserver.mydomain.com mywebserver 

或者它会更好,在我的应用程序池使用与那些SPN集的域帐户?

+0

作为一个更新,我正在研究,如果Windows防火墙可能会导致这个问题。有谁知道是否使用默认设置的防火墙将阻止Windows身份验证? –

回答

1

Good ol'Kerberos。除非要求更多解释,否则我不会过分复杂化这个答案。我会从你的问题中推测我们正在谈论一台服务器,并且我也会假设它已经加入了域。因此,我将定义我的清单如下:

  • 让NetBIOS名称服务器是websvr1
  • 让FQDN(完全限定域名)为服务器websvr1 .domain.com
  • 当然,我们假定我们对域domain.com
  • 让NetBIOS名称为SQL Server是SQL1
  • 让SQL服务器的FQDN为sql1.domain。COM
  • 让SQL Server服务的用户是域\ sqlusr
  • 我假设的1433

SQL Server的默认端口话虽如此,再加上考虑到什么在已经说明你的的问题,我会尝试这样设置:

第一跳设置(SPN)

  • 注册以下SPN
  • SETSPN -S HTTP/websvr1.domain.com websvr1 $
  • SETSPN -S HTTP/websvr1 websvr1 $

第一跳设置(验证)

  • 请在提供程序中包含Negotiate和NTLM以允许回退机制。
  • 注:确保协商是上的供应商列表NTLM的顶部
  • 您不需要禁用内核模式身份验证。老实说,我不确定为什么这么多人禁用内核模式认证。即使对作为域帐户运行的应用程序池,也可以使用useAppPoolCredentials =“true”属性来允许内核模式身份验证成功解密使用域帐户加密的Kerberos票证。
  • 其余的设置都很好。

二跳设置(SPN)

  • 只是为了确保我们涵盖所有可能的组合,设置以下SPN:
  • SETSPN-S为MSSQLSvc/sql1.domain.com DOMAIN \ sqlusr
  • SETSPN -S为MSSQLSvc/sql1.domain.com:1433 DOMAIN \ sqlusr
  • SETSPN -S为MSSQLSvc/SQL1 DOMAIN \ sqlusr
  • 套PN-S为MSSQLSvc/SQL1:1433 DOMAIN \ sqlusr

二跳设置(IIS代表团)

现在,无论是IIS和SQL的SPN是设置,你应该能够建立约束代表团以允许IIS代表当前登录的用户请求MSSQLSvc服务票证。

  • 在DOMAIN \ websvr1计算机帐户的AD委派选项卡中,选择“信任此计算机以委派到指定的服务”选项。
  • 仅使用Kerberos
  • 从列表中选择MSSQLSvc \ sql1和MSSQLSvc \ sql1.domain.com并添加这些服务。

上面的设置被认为是一个受约束的Kerberos委托,它比无约束的委派安全得多。我的理解应该包括它。

注意

我选择使用SETSPN -S,因为这将确保我不小心设置重复的SPN并打破Kerberos身份验证。从上面的示例中,请替换服务器名称,FQDN和帐户的实际值。

NOTE(再次)

Web服务器SPN,如果由于某种原因,我们所请求的URL中的域名仅仅是一个自定义DNS条目(请确保它是一个A记录而不是CNAME,顺便说一句),那么你需要注册所述DNS条目)。

希望以上信息有所帮助。