MVC3 中基于 AD 角色的授权

Posted

技术标签:

【中文标题】MVC3 中基于 AD 角色的授权【英文标题】:AD Roles based Authorization in MVC3 【发布时间】:2011-11-16 07:44:35 【问题描述】:

在我们基于 MVC3 的 Intranet 应用程序中,一个 AD 用户可能属于多个角色,并且在登录期间,他们将选择他们想要登录的角色。我们目前正在使用以下方法对用户进行身份验证:http://www.codeproject.com/KB/system/everythingInAD.aspx#35

一旦用户通过身份验证并发现属于他们尝试登录的角色,我们希望根据他们的角色授权访问特定的控制器和操作。我们更喜欢使用 MVC 的 Authorize 属性。

既然我们没有使用任何提供者进行身份验证,我们还能以某种方式使用 Authorize 属性来限制访问吗?

谢谢! 巴拉

【问题讨论】:

【参考方案1】:

只要您的自定义成员资格提供程序继承自 asp.net MemberShipProvider 类,您就可以使用 Authorize 属性。

但是,如果您决定拥有一个不从 asp.net MembershipProvider 类继承的全新提供,那么您就不能使用 Authorize attirbute。

【讨论】:

【参考方案2】:

@Pankaj 是对的,但您可以为考试定义自定义属性:class MyAuthorizationAttribute : FilterAttribute, IAuthorizationFilter 并覆盖它的 OnAuthorization 方法。然后用这个自定义属性装饰每个动作,并在 OnAuthorization 的正文中计算授权。这是一个示例:

public class MyAuthorizationAttribute : FilterAttribute, IAuthorizationFilter
    
        public string _name;

        public MyAuthorizationAttribute(string name)
        
           this._name = curPerm.name;
        


        public void OnAuthorization(AuthorizationContext filterContext)
        
          // Calculate permissions...
          if (!permit)
                         
             Exception e = new MethodAccessException("Access to partial denied!");
             throw new Exception("Can't access via address bar!", e);
          
        

并在行动中使用

[MyAuthorizationAttribute ("Add")]
public ActionResult Index()

    ViewBag.Message = "About page";

    return View();

希望这有用。 祝你好运。

【讨论】:

以上是关于MVC3 中基于 AD 角色的授权的主要内容,如果未能解决你的问题,请参考以下文章

MVC 3 ASP.NET 角色-授权属性

鉴权/授权基于角色的简单授权认证

Spring Boot中基于​​角色的授权

无法从 azure AD 应用清单分配角色

动手实验01-----vCenter 微软AD认证配置与用户授权

如何在 AngularJS 和 FireBase 中进行简单的基于角色的授权?