.net 4.0 通过表单身份验证从代码隐藏中模拟用户

.net 4.0 通过表单身份验证从代码隐藏中模拟用户,.net-4.0,asp.net-4.0,.net 4.0,Asp.net 4.0,使用表单身份验证时是否可以模拟用户 问题是,我想要一个用户的外部登录和一个只使用集成windows安全性的内部站点,并且需要模拟用户 我环顾四周,发现约翰的答案真的很好,但我不太明白我怎么能把它和我的表单身份验证混在一起 建议 编辑 我想要一个控件,此控件将针对Active Directory进行身份验证,Active Directory与我要在其上使用模拟的Windows计算机具有相同的用户集 我的问题是,我不知道如何使用提供给控件的相同用户名和密码进行保护。要使该解决方案起作用,您需要访问

使用表单身份验证时是否可以模拟用户

问题是,我想要一个用户的外部登录和一个只使用集成windows安全性的内部站点,并且需要模拟用户

我环顾四周,发现约翰的答案真的很好,但我不太明白我怎么能把它和我的表单身份验证混在一起

建议


编辑

我想要一个
控件,此控件将针对Active Directory进行身份验证,Active Directory与我要在其上使用模拟的Windows计算机具有相同的用户集


我的问题是,我不知道如何使用提供给
控件的相同用户名和密码进行保护。

要使该解决方案起作用,您需要访问用户的id和密码。我不相信你可以使用登录用户控件得到这个;您需要创建自己的登录表单并自己处理登录操作。在会话中保留用户的id和密码(最好是以安全字符串形式),一旦您通过身份验证,并且当您需要代表用户访问内部站点时,请使用引用示例中的Impersonator类使用凭据模拟用户

  using (var context = Impersonator.LogOn( username, password ))
  {
      try
      {
      ....
      }
      finally
      {
         context.Undo();
      }
  }

参考答案对我来说似乎很简单。你错过了什么?模拟意味着他们有一个Windows帐户,而您正在使用此帐户进行身份验证(和模拟)。也许再详细一点你希望它如何工作会帮助我理解。@tvanfosson试图澄清一点。我担心它一定是那样的。你知道我有什么办法可以把整个网站变成“模拟”模式吗?@Filip-我不认为模拟可以“开箱即用”的表单身份验证,因为不能保证使用表单身份验证的windows安全令牌。您真的需要模拟还是委派就足够了?例如,给运行内部站点的帐户足够的权限来代表每个用户做事情,然后简单地告诉它应该为哪个用户工作。@tvanfosson,不幸的是委派是不够的。我们正在调用的底层系统将使用已登录的Windows用户,因此我们需要模拟该用户。我当然可以在所有电话中使用上述模拟,但这仍然是一件麻烦事。@Filip-我真的认为这是唯一的办法。每个线程都可能会处理许多用户。使其工作的唯一方法是让线程仅在代表用户执行某些工作时模拟用户。这可以为整个请求完成,也可以为每个调用构建一个模拟的服务层。哪一个是最好的取决于其他情况——您可能希望遵循最小特权原则,直到您需要更高性能的产品。谢谢!简单想想,将context.Undo()放在Impersonator的析构函数中是否安全?