我正在使用MVC 5和Windows身份验证,并且需要在数据库而不是AD组中使用角色管理。我过去曾使用过asp.net成员身份解决方案来执行此操作,但希望使用更现代的身份表。我无权访问广告组。如何才能做到这一点?
就我个人而言,我将跳过ASP.NET标识部分,而仅使用自定义的授权过滤器即可。
从历史上看,在MVC中,身份验证(您可以证明自己是 谁 )和授权(您 可以 做什么)之间的界限很模糊。
启用Windows身份验证后,将执行 Authentication 部分,并且已经针对设置了Domain \ Username形式的用户身份HttpContext。您需要做的是弄清楚它们的 授权 用途。
HttpContext
该问题被标记为Oracle,您可能希望使用缓存或类似的方法,因此确切的方法会有所不同。为简单起见,我们假设您有一个静态UserManager.IsInRole类/方法,该类/方法使用Domain \ Username和逗号分隔的Roles字符串进行检查,并返回布尔值,指示用户是否处于允许的角色之一。在实践中,您可能需要弄混“依赖注入”,这对于使用过滤器可能会有些棘手。
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控制器”或“选择的操作”中的标准属性。
Authorize