我有以下方案,我计划使用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
我认为这回答了我的问题。
答案 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模拟,应用程序池设置等...以查看是否有更好的方法。