在ASP.NET MVC上进行Active Directory身份验证

4

我在我的数据库中有几张表,指定了哪些用户(根据你的AD用户名)可以使用我正在构建的ASP.NET MVC 2应用程序。

我的问题是如何编写一个方法(或更可能是在哪里和在哪里放置它?在主页上?)来从HTTP上下文中获取AD用户,并将其与数据库进行验证,以查看您是否可以实际使用该应用程序?如果可以...想法是在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个回答

4
你可以激活并使用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()
    {
        ...
    }
}

我已经激活了它,HTTP上下文正在填充正确的信息。我需要知道的是如何编写一个自定义[authorize]方法...也许你可以指向一些解释这个的信息或指南吗? - Gotjosh
@Darin 非常感谢,您能否提供更多反馈? - Gotjosh
@Gotjosh,反馈什么?您遇到了什么问题? - Darin Dimitrov
@Gotjosh,我不理解你在更新问题中提到的第二种方法是什么。所以如果我理解正确的话,你想要渲染一些自定义视图而不是...(目前发生了什么,以及与你期望的结果有何不同)? - Darin Dimitrov
实际问题是,我如何从这个类内部返回一个视图? - Gotjosh
显示剩余2条评论

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 = "欢迎来到ASP.NET MVC!";
return View(); }

祝你好运并启用NTLM身份验证 http://msdn.microsoft.com/en-us/library/gg703322(v=vs.98).aspx - hidden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接