我有一个使用Windows窗体身份验证的ASP.NET(.NET 4.0)应用程序。这针对Active Directory进行身份验证,并且运行正常。
此Web应用程序在同一服务器上调用ASP.NET Web服务(.NET 4.0)。应用程序和服务都在IIS 6上运行。
Web服务使用“Integrated Security = SSPI”作为连接字符串的一部分来调用同一域中的SQL Server 2005数据库。
我希望Web服务和数据库连接使用Web应用程序登录用户的凭据。
我已尝试过几十个网站的几十种设置组合,但没有任何效果。我已经到了第二天,没有到任何地方。
这甚至可能吗?
在我最近的尝试中,我在调用Web服务之前在Web应用程序中添加了此代码:
svc.Credentials = System.Net.CredentialCache.DefaultCredentials;
但是在服务中,User.Identity.Name返回启动Web服务器的用户的值。
答案 0 :(得分:1)
您尝试做的事情称为“委托”。这意味着最终用户通过Web服务器进行身份验证,然后Web服务器尝试使用这些凭据来访问SQL Server。但是SQL Sever不信任Web服务器,它只信任域控制器。所以请求失败了。
除了不工作,代表团还有另一个缺点。由于每个用户都使用不同的凭据,因此不再合并SQL连接。每个凭证都有自己的池。即使在用户数量很少的情况下,这也是一个主要的资源。
有关详细信息,请查看this MSDN article。
TL; DR:放弃授权并转移到SQL身份验证。