【问题标题】:Securing ASP.NET MVC 4 Application used by both external and internal users保护外部和内部用户使用的 ASP.NET MVC 4 应用程序
【发布时间】:2014-02-08 14:48:54
【问题描述】:

我正在尝试创建一个可供外部和内部用户使用的 ASP MVC 4 应用程序,但不确定哪种方法是最好的继续。

我创建了自己的授权逻辑,但这仅处理外部用户,我不确定如何以安全的方式添加和验证内部用户。当前代码如下所示:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    if(Idnt.IsInitialized() == true)
    {
        return true;
    }
    else
    {
        return false;
    }
}

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    filterContext.Result = new RedirectResult("Login/RedirectToExternalLogin");
}

以上对于外部用户来说工作正常。但是我的问题是我们也有一些内部用户。需要访问应用程序的内部用户由 AD 组定义(因此只有部分内部用户被允许访问应用程序)。为了让我检查用户是否在 AD 中,我使用以下代码:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain", "Username", "Password");

问题是我无法在没有用户 AD 用户名和密码的情况下访问域控制器,因此内部用户需要输入此内容,以便我检查用户是否在允许访问应用程序的组中.

我正在考虑创建一个 AdminController 并检查用户是否通过 xyz.com/Admin 或 xyz.com 访问应用程序(并阻止 /Admin 的所有条目从防火墙中的外部访问),但更糟糕的是还可以使用查询字符串 fx 从旧的遗留系统访问应用程序

xyz.com/?VALUE1=1234&VALUE2=5678

不像黑客那样思考/作为安全专家,我的谷歌搜索技能是空的,我有这些问题以确保我不会引入安全风险:

1:最简单的解决方案是创建一个虚拟 AD 帐户,该帐户可以查询 AD 并确定当前登录的 Windows 用户是否是允许访问该应用程序的组的成员。流程基本上是:

  • 用户访问应用程序。如果不进行外部验证,请检查用户是否是内部用户和组成员。由于 AD 域控制器与应用程序服务器位于同一域中,这将是一个安全但不是很优雅的解决方案?

2:阻止来自外部源的对 /Admin 的所有访问和所有包含查询字符串的查询(如果这是可能的,或者这会干扰 ASP MVC 的内部魔法工作吗?),然后将(因此验证的)内部用户重定向到输入页面并使用这些凭据来查询 AD 域控制器并验证用户。然而,这也需要以安全的方式存储某种会话变量,所以用户不会一直得到提示,最后我需要验证这个变量或将用户发送到外部登录页面,我不知道伪造这样的东西有多容易?

3:我缺少一个可以帮助我存档上述内容的简单明显的解决方案? Fx 可以像这样检查 IP 地址吗:ASP.Net check if user is internal or external 还是容易欺骗?

【问题讨论】:

标签: asp.net asp.net-mvc security asp.net-mvc-4


【解决方案1】:

最后我选择了选项 2。这似乎是最好的解决方案,因为硬编码帐户不可取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2021-05-28
    • 2014-03-30
    • 2021-08-04
    • 2020-11-04
    • 2011-03-12
    • 1970-01-01
    • 2013-07-17
    相关资源
    最近更新 更多