【问题标题】:Advice on Windows Impersonation but changing to another user关于 Windows 模拟但更改为其他用户的建议
【发布时间】: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


    【解决方案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 模拟、应用程序池设置等...看看是否有更好的方法。

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2011-10-17
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      相关资源
      最近更新 更多