Множество аутентификаций с присвоением авторизации (MVC и AD) - PullRequest
0 голосов
/ 09 марта 2020

Я использую аутентификацию windows и поместил атрибут Authorize поверх класса моего контроллера, чтобы убедиться, что только указанная группа c в активном каталоге может получить доступ к функциям администратора. Моя проблема в том, что, когда я пытаюсь go к любым представлениям из 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>
...