【发布时间】:2011-04-09 08:35:50
【问题描述】:
我有以下情况,我计划使用 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 中检索到的所有角色分配给 Principal。
我想也许我可以为此使用模拟。
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
我认为这回答了我的问题。
【问题讨论】:
标签: c# asp.net asp.net-membership windows-authentication impersonation