Pergunta

  • Asp.Net MVC 3
  • Autenticação de Formulários (personalizada)
  • iPad MóvelSafari
  • iframe (mesmo domínio)

Depois de lutar com formsTicket.UserData não estou trabalhando com MobileSafari (SOMENTE MoblieSafari), descobri que httpContext.User.Identity.Ticket.UserData é vazio (no MobileSafari, não nos outros) e o FormsAuthentication original HttpCookie contém o valores certos?!?

Como pode ser?!

Código:

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!
        ...
    }
}

Qualquer pista seria útil!

LG
Warappa

PS:Se for importante, utilizo uma página do meu site em um iframe - mesmo domínio.

Foi útil?

Solução

Então a questão era a seguinte:
Este erro surgiu quando eu entrei e acessei uma página que fez um history.back().

Olhando o tráfego com o Fiddler eu vi que o Asp.Net usava o sem biscoitos modo de autenticação, então a autenticação foi codificado no URL.Agora, quando o history.back() ocorreu, o URL apontou para o URL de logout com O agora informações de autenticação inválidas...bug desagradável ao meu lado.

Forçar o Asp.Net a usar cookies resolveu o problema!

LG
Warappa

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top