Проверка подлинности с помощью форм: данные пользователя потеряны (но в файле cookie) - PullRequest
2 голосов
/ 19 мая 2011
  • Asp.Net MVC 3
  • FormsAuthentication (custom)
  • iPad MobileSafari
  • iframe (тот же домен)

После борьбы с formsTicket.UserData, не работающим с MobileSafari (ТОЛЬКО MoblieSafari), я обнаружил, что httpContext.User.Identity.Ticket.UserData это пусто (в MobileSafari, а не в других) и оригинальная FormsAuthentication HttpCookie содержит правильные значения ?!?

Как это может быть?!

Код:

public void UpdateContext()
{
    if (httpContext.User.Identity is FormsIdentity)
    {
        // Get Forms Identity From Current User
        FormsIdentity id = (FormsIdentity)httpContext.User.Identity;
        // Create a custom Principal Instance and assign to Current User (with caching)
        HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

        var cookieUserData = ticket.UserData; // not empty
        var httpContextIdentiyUserData = id.Ticket.UserData; // empty!
        ...
    }
}

Любая подсказка будет полезна!

Lg
Warappa

PS: Если это имеет значение, я использую страницу моего сайта в iframe - тот же домен.

1 Ответ

2 голосов
/ 20 мая 2011

Итак, проблема была в следующем:
Эта ошибка возникла , когда я вышел из системы и получил доступ к странице, которая сделала history.back().

Глядя на трафик с Fiddler, я увидел, что Asp.Net использовал без cookie режим аутентификации , поэтому аутентификация была закодирован в URL . Теперь, когда произошел history.back(), URL указывал на URL выхода из системы с теперь неверной информацией аутентификации ... неприятная ошибка на моей стороне.

Заставив Asp.Net использовать куки, все получилось!

Lg
warappa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...