有关Windows模拟的建议,但更改为其他用户

时间:2011-04-09 08:35:51

标签: c# asp.net asp.net-membership windows-authentication impersonation

我有以下方案,我计划使用Windows身份验证。

1.1)我有一个将在域内运行的Web服务器 1.2)网站将在具有一组配置权限的域用户的凭据下运行(一个允许访问文件系统,SQL服务器数据库等)。 1.3)访问该网站的用户将属于同一个域,因此我打算使用Windows身份验证。

所以此时,经过身份验证的用户将访问该站点,但我想从代码中可以看出,“CurrentUser”将是运行该站点的用户。

我想要以下内容。

2.1)使用Windows身份验证对访问该站点的用户进行身份验证。 (域控制器将对此负责) 2.2)使站点在步骤1.2中在配置的用户下运行。所以它拥有所有权限 2.3)但我想知道用于验证的初始用户(步骤2.1)。

这样我可以做到以下几点:

3.1)用户“A”决定访问该站点,因为他属于与Web服务器相同的域,他成功进行了身份验证。
3.2)从代码中我检测到“A”经过身份验证,因此我将去获取他的角色。 “Role1,Role2,Role3”。
3.3)然后我希望代码在步骤1.2中配置的用户下运行,但我将为Principal分配从3.2检索的所有角色。

我认为也许我可以使用Impersonation。

4.1)因此用户“A”决定访问该站点并进行身份验证 4.2)该站点最初将以“A”凭证运行,因此“CurrentUser”将为“A” 4.3)将用户(以某种方式)切换回1.2中的用户 4.4)我可以检索所有4.1个已配置的角色 4.5)为当前主体分配从4.4检索的角色。

因此,最终网站将使用带有模拟的Windows身份验证,但是从代码中我将切换回用户1.2。

如果你已达到这一点,感谢阅读!我想知道这是否可行,是否可以实现,或者我是否过于复杂。

还建议我如何插入以及在何处进行所有角色检索和用户切换 非常感谢!

更新1

@ Code Jammr,你是对的,不需要做任何疯狂的事情。但我想我仍然需要研究HttpModules,..

经过一些测试,搜索等......

我已经开始理解这些IIdentity对象之间的区别:

HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
WindowsIdentity i2 = WindowsIdentity.GetCurrent();

我发布了另一个问题来帮助我理解它们: Help understanding impersonation

我认为这回答了我的问题。

1 个答案:

答案 0 :(得分:1)

有几个代码样本用于进行模拟。大多数涉及处理令牌和Win API调用。但如果你真的必须这样做,我说这不知道你的网络服务器类型是什么。 IIS 6或IIS7,然后有很多代码示例,以指导您。

这是ya的一个链接,它几乎为您提供了一个起点。 http://msdn.microsoft.com/en-us/library/aa331755(v=vs.71).aspx

这是AD身份验证的链接,您可能不必做任何疯狂的事情。 http://support.microsoft.com/kb/326340

您可能需要查看asp.net模拟,应用程序池设置等...以查看是否有更好的方法。