具有授权属性(MVC和AD)的多种身份验证

时间:2020-03-09 11:10:06

标签: c# asp.net-mvc active-directory authorization

我正在使用Windows身份验证,并且在控制器类的顶部放置了一个Authorize属性,以确保仅Active Directory中的特定组可以访问管理员功能。我的问题是,当我尝试从Admin controller转到任何视图时,它将要求进行9次身份验证,而第一次访问控制器时要求进行1次身份验证。似乎可以记住,我已经通过了查看视图的身份验证,但是随后它在加载视图时运行了一些任务,这需要9次新的身份验证。我不知道为什么要这么做。

我尝试将Authorize属性放在方法而不是类上,但是即使没有Authorize属性的方法也可以这样做。我的猜测是,initialize method会提示您进行授权,但是我尝试以调试模式运行该应用程序并一步一步地完成initialize method的每一行,但没有提示在完成方法之前进行授权。也许是database context?任何帮助解决此问题的帮助都将受到赞赏!

当我尝试创建此授权功能时,下面是我添加的唯一代码。

管理控制器:

    [Authorize(Roles = "DOMAIN\\SECURITY-GROUP")]
    public class AdminController : Controller
    {
        private ITScreenContext db = new ITScreenContext();
        private EmailService emailService = new EmailService();

        protected override void Initialize(RequestContext requestContext)
        {
            base.Initialize(requestContext);

            string culture = requestContext.RouteData.Values["lang"]?.ToString() ?? "en";
            var cultureInfo = CultureInfo.GetCultureInfo(culture);

            Thread.CurrentThread.CurrentCulture = cultureInfo;
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
        }

        // GET: Admin
        public ActionResult Index()
        {
            return View(db.PP_Items.ToList());
        }

Web.config:

  <system.web>
    <authentication mode="Windows"/>
    <authorization>
      <deny users="?"/>
    </authorization>
    <compilation debug="true" targetFramework="4.7.2" />
    <httpRuntime targetFramework="4.7.2" />
    <customErrors mode="Off" />
    <sessionState mode="InProc" timeout="11" />
  </system.web>

0 个答案:

没有答案