ASP.NET MVC上的Active Directory身份验证

时间:2011-04-09 16:16:47

标签: c# asp.net-mvc-2 authentication

我的数据库中有几个表指定女性用户(取决于您的AD用户名)实际上可以使用我正在构建的当前ASP.NET MVC 2应用程序。

我的问题是如何(或者更可能在何处以及在何处放置它?在母版页上?)我是否编写了一个方法,将AD用户从HTTP上下文中取出并对数据库进行验证以查看是否存在你真的可以使用该应用程序?如果你能...想法是在Session对象中用我需要的信息(角色,全名等)写几个键。

我对如何实现这一点感到困惑,如果它实际上是正确的方式...请记住,我的应用程序中有一个管理部分和非管理部分。

有什么想法吗?

编辑:请记住,我不关心通过表单验证用户。我要检查的是,根据我的数据库和您的AD用户名,您可以使用我的应用程序。如果您可以写入会话以消除我需要的信息。否则只是抛出错误页面。

这是我到目前为止实施的,这是要走的路吗? 第二种方法是什么? (对不起,我对c#不熟悉)如果你没有被授权,我想要做的就是抛出一个视图......

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
  var isAuthorized = base.AuthorizeCore(httpContext);
  if (isAuthorized)
  {
    var canUse = this._userRepo.CanUserUseApp(httpContext.User.Identity.Name);
    if (!canUse)
    {
      isAuthorized = false;
    }
  }
  return isAuthorized;
} 

2 个答案:

答案 0 :(得分:4)

您可以activate and use Windows (NTLM) authentication然后编写自定义[Authorize]属性,您可以在其中获取当前连接的AD用户,并执行额外检查,确定他是否有权对您的数据存储使用该应用程序。然后,您将使用此自定义属性修饰需要授权的控制器/操作。


更新:

以下是此类自定义属性的示例:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (isAuthorized)
        {
            // The user is authorized so far => check his credentials against
            // the custom data store 
            return IsUserAllowedAccess(httpContext.User.Identity.Name);
        }
        return isAuthorized;
    }

    private bool IsUserAllowedAccess(string username)
    {
        throw new NotImplementedException();
    }
}

然后:

[MyAuthorize]
public class FooController: Controller
{
    public ActionResult Index()
    {
        ...
    }
}

答案 1 :(得分:0)

使用此代码

创建一个名为AdminAttribute的类

 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AdminsAttribute : AuthorizeAttribute
    {
            public AdminsAttribute() 
            {
                this.Roles = "MSH\\GRP_Level1,MSH\\Grp_Level2"; 
            }
    } 


 public class HomeController : Controller
    {
        [Admins] 
        public ActionResult Level1()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";


            return View();
        }