繁体   English   中英

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

[英]ASP.NET Windows Authentication Impersonate Problem

在我以前的问题中,我问的是如何在我的应用程序中使用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混合。

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

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

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 asp.net模拟指南有更多。

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

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

如果您不能这样做,您可以在希望阻止委派的Sql Server实例上关闭Windows /混合身份验证,然后在web.config中的连接字符串中手动配置要连接的Sql Server帐户。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM