一尘不染

如何在MVC中使用Windows身份验证,但如何使用较新的身份数据库表进行角色存储?

sql

我正在使用MVC
5和Windows身份验证,并且需要在数据库而不是AD组中使用角色管理。我过去曾使用过asp.net成员身份解决方案来执行此操作,但希望使用更现代的身份表。我无权访问广告组。如何才能做到这一点?


阅读 166

收藏
2021-05-23

共1个答案

一尘不染

就我个人而言,我将跳过ASP.NET标识部分,而仅使用自定义的授权过滤器即可。

从历史上看,在MVC中,身份验证(您可以证明自己是 )和授权(您 可以 做什么)之间的界限很模糊。

启用Windows身份验证后,将执行 Authentication 部分,并且已经针对设置了Domain \
Username形式的用户身份HttpContext。您需要做的是弄清楚它们的 授权 用途。

该问题被标记为Oracle,您可能希望使用缓存或类似的方法,因此确切的方法会有所不同。为简单起见,我们假设您有一个静态UserManager.IsInRole类/方法,该类/方法使用Domain
\
Username和逗号分隔的Roles字符串进行检查,并返回布尔值,指示用户是否处于允许的角色之一。在实践中,您可能需要弄混“依赖注入”,这对于使用过滤器可能会有些棘手。

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控制器”或“选择的操作”中的标准属性。

2021-05-23