MVC3 - Смешивание аутентификации Windows и Forms - автоматический вход - как? - PullRequest
1 голос
/ 25 июня 2011

Я реализовал что-то вроде этого: Аутентификация Windows с ASP.NET MVC

Фон - это приложение для внутренней сети и использует Active Directory - приложение поддерживает свой собственный список пользователей.(т. е. входы в сеть) и роли - у меня есть пользовательские классы Membership и RoleProvider, которые выполняют логику Membership.ValidateUser и т. д. - логику проверки: * если пользователь (сетевой вход) находится в пользовательской таблице приложения, он зарегистрирован* при доступе к любому URL / действию выполните автоматический вход, если это еще не сделано * если пользователь НЕ находится в системе, перенаправьте его на страницу «NoPermission» * также используется атрибут [Authorize (Roles = "blah")]

Вот мой код OnAuthorize контроллера на моем контроллере: защищенное переопределение void OnAuthorization (AuthorizationContext authContext) {

        if (!this.HttpContext.Current.User.Identity.IsAuthenticated) 
        {
            string networkLogin = HttpContext.Current.Request.LogonUserIdentity.Name;
            if (this.MembershipService.ValidateUser(networkLogin))
            {

                FormsAuthentication.SignIn(networkLogin, true); 
                base.OnAuthorization(authContext); 
            } 
        }
    }

А вот фрагмент из моего Web.Config

<authentication mode="Forms">
  <forms loginUrl="~/Home/NoPermissionIndex"
    timeout="1"
    defaultUrl="~/Home/Index"
  />
</authentication>

ПроблемаБольшинство вещей работает, КРОМЕ при первом доступе, пользователь вошел в систему, но все еще перенаправлен на «NoPermiss»иона ".Далее, когда сеанс / cookie / ticket (какая разница, кстати?), Пользователь также перенаправляется на страницу «NoPermission».

Я прочитал отсюда ASP.NET MVC HttpContext Получение IdentityNameпосле входа в систему вероятная проблема может быть связана с тем, что в запросе отсутствует cookie-файл аутентификации, и что мы должны отправить его в ответ, чтобы клиентский браузер отправил его в запросе при последующих вызовах.

Если это так, как я могу решить это при первом доступе?А во-вторых, как мне сделать так, чтобы cookie никогда не истекал?(Или просто дайте тайм-ауту действительно большое число? Или какое-то другое решение?)

Помогите, пожалуйста!

Спасибо.

...