ASP.NET Windows身份验证模拟问题

时间:2009-09-11 13:55:58

标签: asp.net iis windows-authentication

在我以前的问题中,我问的是如何在我的应用程序中使用Windows身份验证。现在正在运行,用户可以使用该帐户登录,但我有一个数据库访问方案,我找不到任何内容。

基本上我会有几台服务器,这就是问题所在。

在某些服务器上,他们将拥有SQL Server数据库服务器的Windows身份验证帐户,因此应使用模拟其凭据。但我注意到它在web.config(不是每个连接)中的全局设置,并且我想要使用应用程序(IIS或ASP)Windows身份验证帐户而不是用户。 (访问我的配置数据库)

我怎么能实现这个目标?

Web应用程序是在Server 2003/2008 IIS 6/7 / 7.5上托管的ASP.NET MVC,客户端是Windows XP及更高版本。使用SQL Server Express / Standard 2005/2008混合。

3 个答案:

答案 0 :(得分:6)

模拟是在网站范围内进行的,或者您可以手动将其打开。你不能做的是手动把它关闭我害怕,也不能通过连接字符串来完成。

所以基本上关闭模拟,然后在需要模拟时包装数据库调用,如下所示:

using System.Security.Principal;

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
    ctx = winId.Impersonate();
    // Do your thing
}
catch
{
}
finally
{
    if (ctx != null)
        ctx.Undo();
}

MSDN P&P guide to asp.net impersonation有更多。

答案 1 :(得分:2)

您必须在网络上设置委派,以便ASP.NET服务器可以模拟Sql server计算机上的用户。这假设您的服务器位于Active Directory控制的网络(而非工作组)上,并且sql服务器位于与Web服务器不同的计算机上。

您可以为希望模拟用户的数据库服务器计算机配置委派,而不要为希望ASP.NET辅助进程帐户作为访问服务器的帐户的那些服务器计算机配置委派。

如果无法执行此操作,可以在希望阻止委派的Sql Server实例上关闭Windows /混合身份验证,然后在web.config中的连接字符串中手动配置要连接的Sql Server帐户

答案 2 :(得分:0)

使用域控制器 - 因此它可以为整个域中的单个用户传播相同的凭据。

工作组的第二个技巧 - 在两台服务器(ASP和SQLServer)上创建相同的模拟帐户(具有完全相同的登录名和密码)。不要忘记在SQLServer上授予此权限。