繁体   English   中英

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

[英]Active Directory Authentication on ASP.NET MVC

我在我的数据库上有几个表指定女性用户(取决于您的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;
} 

您可以激活并使用Windows(NTLM)身份验证 ,然后编写自定义[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()
    {
        ...
    }
}

使用此代码创建一个名为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();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM