保护ASP.NET MVC 4外部和内部用户使用的应用程序

时间:2014-01-19 12:50:49

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

我正在尝试创建一个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:我想念的一个简单明显的解决方案可以帮我归档上述内容吗?如果可以检查这样的IP地址:ASP.Net check if user is internal or external或者是否易于欺骗?

1 个答案:

答案 0 :(得分:0)

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

相关问题