我正在使用MVC 5和Windows身份验证,需要在数据库中使用角色管理,而不是AD组。我过去使用了ASP.NET成员解决方案来执行此操作,但宁愿使用更现代的身份表。我无法访问广告组。如何完成?
我个人会跳过ASP.NET身份部分,然后使用自定义授权过滤器进行操作。
从历史上看>
当您启用Windows身份验证时,请处理 authentication 的部分,并且用户的身份以域的形式用户名已设置为HttpContext
。您需要做的是弄清楚它们是授权的。
这个问题被标记为Oracle,您可能希望使用缓存或类似的东西,因此确切的方法会有所不同。为了简单起见,我们将假设您有一个静态的UserManager.IsInRole
类/方法,该类别/方法拿一个域用户名和一个逗号分隔的角色字符串来检查并返回一个布尔,以指示用户是否占允许的角色之一。在实践中,您可能需要弄乱依赖注入,这对于过滤器可能有些棘手。
public class DbAuthorize : System.Web.Http.AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var isAuthorized = base.IsAuthorized(actionContext);
var user = actionContext.ControllerContext.RequestContext.Principal.Identity;
if (user == null)
return false;
return isAuthorized && UserManager.IsInRole(user.Name, this.Roles);
}
}
然后可以使用您选择的控制器或操作的标准Authorize
属性