2012-03-21 93 views
0

我有一个使用Windows窗体身份验证的ASP.NET(.NET 4.0)应用程序。这对Active Directory进行身份验证,工作得很好。从ASP.NET Web应用程序到ASP.NET Web服务到SQL Server的验证

此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返回谁开始在网络用户的价值服务器。

+0

查看http://support.microsoft.com/kb/306158,并尝试“模拟验证代码中的用户”中的代码,看看它是否适用于您。 – 2012-03-21 15:15:21

+0

@NickBork:该方法需要给ASP.NET“作为操作系统的一部分运行”权限,甚至使它作为SYSTEM(NT的根名称)运行。不知道这一切是否健康。 – Andomar 2012-03-21 15:19:16

回答

1

你想要做的就是所谓的“委托”。这意味着最终用户使用Web服务器进行身份验证,然后Web服务器尝试使用这些凭据访问SQL Server。但是SQL Sever不信任Web服务器,它只信任域控制器。所以请求失败。

除了不工作,代表团还有另一个缺点。因为每个用户都会使用不同的凭证,SQL连接将不再被合并。每个证书都有自己的池。即使在用户数量较少的情况下,这将成为主要的资源浪费。

欲了解更多信息,检出this MSDN article

TL; DR:放弃委派并转到SQL身份验证。

+0

我可能会转移到SQL身份验证。但是,Web服务仍然需要获取用户的凭据以确定要连接哪个SQL用户。 Web服务与Web应用程序在同一台服务器上运行,因此委派不应该成为问题。 – skataben 2012-03-21 17:36:44

相关问题