【问题标题】:Web Applications: Allowing super users to impersonate other users - Is there a design pattern for this?Web 应用程序:允许超级用户模拟其他用户 - 有没有设计模式?
【发布时间】:2011-06-21 13:18:07
【问题描述】:
  • 在我的 Web 应用程序中,我想允许超级用户模拟其他用户。

我的问题:

我可以使用一种普遍接受的设计模式来实现这一点吗?

  1. 一般来说,我可以想象我需要在会话中跟踪当前用户和模拟用户。
  2. 但您可以理解,我希望尽量减少与此更改相关的复杂性。

  3. 顺便说一句,我的应用程序是一个 ASP.NET MVC 2 应用程序,所以如果我可以利用任何现有的基础设施,那就太好了。

编辑:我正在使用表单身份验证。

编辑:我还需要跟踪一个超级用户代表另一个用户行事的事实。我需要这样做有两个原因:

  1. 日志记录应该记录一个超级用户代表另一个用户行事的事实。
  2. 可以想象,超级用户想要返回模拟屏幕以“切换上下文”并模拟其他用户。

编辑: @Jordão 提出了 mostly workable solution。我唯一关心的是以下问题 - 如果超级用户(在模拟其他用户时)导航到主屏幕,并且屏幕顶部显示“Hello [User]”,我希望它说“Hello [Impersonated User]”为反对“你好[超级用户]”。而且我担心@Jordão 的解决方案会使这个屏幕和其他具有类似要求的屏幕的实现更加复杂。

【问题讨论】:

  • 不要这样做。它具有安全和隐私含义。你甚至可以说这是不道德的。
  • @Jordão 对于 Intranet 应用程序,我们一直这样做 - 如果有人不在或已被终止以允许其他人作为他们进入并处理他们队列中的某些事情,这将非常有帮助。
  • @Jordao,有很多客户服务场景,您真的需要知道客户看到了什么。您不能只是对这些业务需求摇摆不定。
  • 您的系统用户是否已通过 AD 身份验证?还是形成身份验证?会话中有用户对象/身份吗?这些将很重要。
  • @Nauman:我实际上听从了 Jordão 的建议,并敦促管理层考虑另一种解决方案。幸运的是,我们能够以独家超级用户界面的好处向他们推销。我们强调,模拟功能将非常昂贵且风险很大。

标签: asp.net-mvc-2 design-patterns web-applications impersonation architectural-patterns


【解决方案1】:
[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}

【讨论】:

  • 好的。而且我想您只需要会话中的另一个字段来跟踪这是一个代表用户名指定的用户的超级用户,对吗?
  • @Jim G.,这取决于您的要求,是否需要跟踪此类事情。
【解决方案2】:

不要冒充其他用户,但要给超级用户足够的权限和专有接口,以便他们可以对其他用户的数据进行操作。

如果您随后拥有日志记录或审核数据,您就知道哪个用户(普通用户或超级用户)对数据进行了操作。

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2018-01-28
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多