通过AspNetUserRoles表进行MVC Windows身份验证+角色管理

时间:2017-03-09 21:10:09

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-identity

我在Visual Studio 2015中使用ASP.NET MVC 5进行Windows身份验证。目前,用户通过在Web.config文件中包含以下内容,无缝连接到应用程序 - 无需登录屏幕:

<system.web>
    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>
</system.web>

然后Global.asax.cs将其用于授权:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    GlobalFilters.Filters.Add(new System.Web.Mvc.AuthorizeAttribute() 
        { Roles = "Some-AD-Group, Another-AD-Group" });
}

上述过滤器将允许进入应用的用户限制为AD群组。我想使用SQL Server上的内置[AspNet*]表来管理授权并将用户与角色匹配。

这个example允许我创建一个自定义授权,但是如何从[AspNetUserRoles]表中获取用户的角色以及在用户持续时间我在哪里存储#&# 39;会议?

这是另一个与角色合作的example,但不确定它们在哪里获得。这个article中有很多好的信息,但没有关于将它绑定到Windows身份验证的信息。

感谢您的帮助。

更新:过滤器将替换为AspNetUserRoles;这个目前只是一个绷带让人们离开,直到我们弄清楚这件事。

2 个答案:

答案 0 :(得分:1)

Windows身份验证是另一回事,您无法将它们绑定在一起。

使用Windows,网络管理员创建窗口组,并将用户放入其中。

它们与您的数据库无关,可以在其他应用中使用。

答案 1 :(得分:1)

您需要为此编写自定义身份验证提供程序。

一种方法可能是做这样的事情:

https://www.codeproject.com/Articles/5353/Custom-Authentication-provider-by-implementing-IHt

或者您可以在框架中使用现有的WindowsAuthenticationProvider类并将其继承到&#34;覆盖&#34;基于角色的方法。

如果您希望通过更多选项进行更深入的潜水,这可能会很有用......

https://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way

但是正常的文档,你可能想从这里开始......

https://msdn.microsoft.com/en-us/library/f1kyba5e.aspx