#asp.net #asp.net-mvc-3 #forms-authentication
#asp.net #asp.net-mvc-3 #формы-аутентификация
Вопрос:
У меня есть приложение MVC, которое использует службу аутентификации с методом IsAuthenticated (), который возвращает true / false.
Похоже, это не связано с проверкой подлинности FormsAuthentication.Метод SignOut () или когда я добавляю новый файл cookie авторизации при входе в систему.
Вход:
HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket)));
Выход:
FormsAuthentication.SignOut();
У меня есть пользовательский атрибут авторизации на моем контроллере, который вызывает службу аутентификации с помощью IsAuthenticated(), но он возвращает неправильное значение.
Кто-нибудь знает, почему следующий код иногда возвращает true или false?
userPrincipal.Identity.IsAuthenticated
Ответ №1:
IsAuthenticated
всегда возвращает false, если вы вызываете его с незащищенной страницы и установили requireSSL=»true» в web config, потому что не можете прочитать аутентифицированный файл cookie.
В других случаях возвращает true, если пользователь аутентифицирован, и false, если нет. Задайте утверждение, подобное этому, чтобы проверить, запрашиваете ли вы его с защищенных страниц.
Debug.Assert(HttpContext.Current.Request.IsSecureConnection, "oops, the IsAuthenticated is not working here");
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
}
Комментарии:
1. Привет, у меня нет настройки SSL. IsAuthenticated возвращает false при вызове из службы в AuthorizeCore(), которая является моим пользовательским атрибутом авторизации.
2. @Jon тогда, возможно, не может прочитать файлы cookie и сеанс. Настроили ли вы службу для чтения файлов cookie записи и данных сеанса?
3. Я думаю, что я, возможно, понял проблему. Моя служба аутентификации зависит от IPrincipal, который вводится StructureMap во время запуска. Однако в этот момент он будет не прошел проверку подлинности. Мне нужно использовать IPrincipal вне текущего потока. Это передается в AuthorizeCore(), который вызывается в моем классе CustomAuthorise (наследуется от AuthorizeAttribute).
Ответ №2:
(Скопировано из комментария выше)
Моя служба аутентификации зависит от IPrincipal, который вводится StructureMap во время запуска. Однако в этот момент он будет не прошел проверку подлинности. Мне нужно использовать IPrincipal вне текущего потока. Это передается в AuthorizeCore(), который вызывается в моем классе CustomAuthorise (наследуется от AuthorizeAttribute)