0

我有以下场景,我正在计划使用Windows身份验证。关于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”已通过验证,所以我会去取他的角色。 “角色1,角色2,角色3”。
3.3)然后,我希望代码在步骤1.2中配置的用户下运行,但是我将为委托人分配从3.2检索到的所有角色。

我以为也许我可以使用模拟为此。

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

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

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

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

更新1

@代码Jammr,你是对的,没有必要做任何疯狂的事情。但我认为我仍然需要看看HttpModules,..

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

我已经开始了解这些IIdentity的对象之间的差异:

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

我张贴另一个问题,帮助我理解他们: Help understanding impersonation

我觉得这回答我的问题。

回答

1

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

这里是一个亚洲的链接,几乎给你一个出发点。 http://msdn.microsoft.com/en-us/library/aa331755(v=vs.71).aspx

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

你可能想看看asp.net模拟,应用程序池设置等等,看看是否有更好的方法。