ASP的Active Directory身份验证.净MVC

本文关键字:MVC 身份验证 Directory Active ASP | 更新日期: 2023-09-27 17:49:28

我有一对表在我的数据库中指定哪些用户(取决于你的AD用户名)实际上可以使用当前的ASP。. NET MVC 2应用程序,我正在构建。

我的问题是如何(或更可能是在哪里和在哪里我把它?在主页上??)我写一个方法,得到AD用户的HTTP上下文中,并验证它对数据库,看看你是否可以实际使用的应用程序?如果你能……它的想法是在会话对象中编写几个键,其中包含我需要的信息(角色,全名等)。

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

任何想法吗?

编辑:请记住,我不关心通过表单验证用户。所有我想检查的是,如果根据我的数据库和你的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;
} 

ASP的Active Directory身份验证.净MVC

您可以激活并使用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)]AdminsAttribute: AuthorizeAttribute{公共AdminsAttribute (){这一点。角色= "MSH''GRP_Level1,MSH''Grp_Level2";}}之前<>之前公共类HomeController: Controller{(管理员)public ActionResult Level1(){ViewBag。消息="欢迎使用ASP。净MVC !";返回视图();}