就我个人而言,我会跳过 ASP.NET Identity 部分,只使用自定义授权过滤器来完成它。
从历史上看,身份验证(你能证明你是谁)和授权(你可以做什么)之间的界限在 MVC 中相当模糊。
当您启用 Windows 身份验证时,将处理身份验证部分,并且已针对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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后可以使用它来代替Authorize您选择的控制器或操作上的标准属性