相关疑难解决方法(0)

ASP.NET 4.0和SQL2008R2中的Kerberos双跃点

我有一个ASP.NET 4.0应用程序,我需要将身份验证转发到数据库.出于此请求帮助的目的,我们调用Web服务器"app1"和数据库服务器"sql1".

SQL2008R2数据库服务作为自定义域帐户"SqlServer"下的命名实例"SQL2008R2"运行.该服务器正在运行Windows Server 2008 R2 Enterprise Edition.我为此创建了一个SPN ...

setspn -a MSSQLSvc/sql1.mydomain.local:SQL2008R2 SqlServer
Run Code Online (Sandbox Code Playgroud)

ASP.NET应用程序在集成管道模式下使用自定义域帐户"WebApplicationUser"在应用程序池下运行.它目前在运行Windows 7 Enterprise的笔记本电脑上运行,但最终将托管在Windows Server 2008 R2标准版上.我为应用程序创建了2个SPN(在我目前运行的Windows 7机器上)...

setspn -a http/app1 WebApplicationUser
setspn -a http/app1.mydomain.local WebApplicationUser
Run Code Online (Sandbox Code Playgroud)

在Active Directory用户和计算机中,我选择了"WebApplicationUser"帐户,并且已使用任何协议启用约束委派为"MSSQLSvc/sql1.mydomain.local:SQL2008R2"(我还尝试过仅使用Kerbero).

应用程序在IIS 7.5中设置,并且身份验证设置为禁用Anonymouse,Basic,Digest和Forms,同时启用"ASP.NET模拟"和"Windows".Windows身份验证已关闭"扩展保护"并启用"内核模式身份验证".提供者按顺序是"协商"和"NTLM".

ASP.NET应用程序使用EF,连接字符串配置为使用集成安全性...

<connectionStrings>
    <add name="MyContext"
             connectionString="metadata=res://*/Data.MyModel.csdl|res://*/Data.MyModel.ssdl|res://*/Data.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=sql1.mydomain.local\sql2008r2;Initial Catalog=MyDatabase;Persist Security Info=false;Integrated Security=True;MultipleActiveResultSets=True&quot;"
             providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我的web配置同时指定了Windows身份验证和模拟,因为我使用了异步页面,我还启用了inpersonation策略流程...

<runtime>
    <alwaysFlowImpersonationPolicy enabled="true" />
</runtime>

<system.web>
    <authentication mode="Windows" />
    <identity impersonate="true" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

如果我在本地登录(在"web1"上)并浏览到应用程序(使用IE),这一切都有效 - 但这不涉及我试图解决的双跳.

如果我登录到另一台计算机,然后使用IE浏览到该应用程序,或者我使用FireFox从本地计算机浏览,这不起作用 - 请注意:FireFox会提示我输入登录详细信息.与数据库的连接失败,"用户登录失败'NT AUTHORITY\ANONYMOUS LOGON'"

与许多文章(这里可能是问题的一部分)不同,我没有使用任何自定义代码来模仿用户.据我所知,模拟将通过上面的web.config设置全面应用于应用程序.我所做的就是打开连接,然后在完成连接后再次关闭它.

我显然错过了一步(或两步),但看了我能找到的所有文档(并且已经有很多),我仍然无法找到那一步.我找到的99%的文档实际上与IIS6和Windows 2003有关,但原则应该保持不变.

有没有人成功使这样的配置在Windows 7和/或Windows Server 2008上运行?

windows sql-server asp.net kerberos iis-7.5

11
推荐指数
2
解决办法
1万
查看次数

IIS到SQL Server kerberos auth问题

我们有一个第三方产品,允许我们的一些用户通过一个单独的服务器(SvrWeb)上的网站操作数据库中的数据(我们称之为SvrSQL).

在SvrWeb上,我们为此应用程序设置了一个特定的非默认网站,因此我们不使用http://SvrWeb.company.com访问网站,而是使用http://application.company.com解析为SvrWeb并且主机标头解析为正确的网站.

还为此站点设置了一个特定的应用程序池,它使用我们称之为"company\SrvWeb_iis"的Active Directory帐户标识.我们设置允许在此帐户上进行委派,并允许它模拟我们希望它执行的另一次登录.(我们希望此帐户将登录到网站的人员的AD凭据传递给SQL Server而不是服务帐户.

我们还通过以下命令为SrvWeb_iis帐户设置了SPN:setspn -A HTTP/SrvWeb.company.com SrvWeb_iis

网站启动,但调用数据库的网站部分返回消息:无法执行数据库查询.用户'NT AUTHORITY\ANONYMOUS LOGON'登录失败.

我认为我们已经正确设置了SPN信息,但是当我检查SrvWeb上的安全事件日志时,我看到了登录的条目,但它似乎是使用NTLM而不是kerberos:

Logon Type: 3
Logon Process:  NtLmSsp 
Authentication Package: NTLM
Run Code Online (Sandbox Code Playgroud)

任何有关此设置的想法或文章都将非常感谢!

如果它有帮助,我们使用SQL Server 2005,Web和SQL服务器都是Windows 2003.

sql-server iis kerberos

4
推荐指数
1
解决办法
6037
查看次数

标签 统计

kerberos ×2

sql-server ×2

asp.net ×1

iis ×1

iis-7.5 ×1

windows ×1