3 votes

Redirection de la connexion ASP.NET sans connexion explicite

ASP .NET 4.0 avec MVC 3.0

Voici donc la situation : Je suis nouveau dans MVC et ASP.NET et j'ai une application MVC qui utilise FormAuthentication avec ce qui suit dans le fichier web.config :

<authentication mode="Forms">
   <forms loginUrl="~/LogOn/LogOn" timeout="2" requireSSL="true" />
</authentication>

Et ce qui se passe généralement, c'est que si un utilisateur navigue vers une page après l'expiration de la session, il est dirigé vers la page de connexion, ce qui fonctionne bien. Ce que j'essaie de faire, c'est d'empêcher le renvoi de cette page si la requête est un appel Ajax et d'envoyer à la place un objet JSON pour indiquer l'échec.
J'ai réussi à attraper la requête, à vérifier le type XMLHttp via la commande ci-dessous :

void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
        if (s_identityProvider == null)
            return;
        IClaimsPrincipal principal = GetClaimsPrincipal();
        Context.User = principal;
        if (principal != null)
            ClaimProvider.CheckAndPopulateRoles(principal);
        else
        {
            if (Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
            {
                Context.Response.Write( "<?xml version='1.0' encoding='ISO-8859-1'?>"+
                                        "<note>"+
                                        "</note>";
            }
            else
            {
                FormsAuthentication.SignOut();
            }
        }
}

Maintenant, j'ai testé que ma vérification de l'appel AJAX semble fonctionner, la seule chose qui est bizarre est qu'après la capture, la page de connexion est TOUJOURS envoyée en tant que réponse. J'ai vérifié toutes les utilisations des méthodes FormsAuthentication pour m'assurer que personne d'autre ne force l'envoi d'une page de connexion. FormsAuthentication.RedirectToLoginPage() et j'ai vérifié, en fait, toutes les utilisations de FormsAuthentication et aucune ne fait quelque chose de bizarre. J'ai également vérifié la requête pour l'URL de la page de connexion (via GetRedirectUrl() ) et toujours rien.

Quelqu'un a-t-il une idée de ce qui pourrait être à l'origine de l'autoredirection ?

0voto

Mike C Points 3442

Je ne peux que supposer que le AuthenticateRequest n'est pas la fin du cycle de vie de la demande. Par conséquent, la méthode Response qui est finalement renvoyée à l'utilisateur est la réponse de redirection. Vous devriez essayer de terminer explicitement le Response après avoir capturé et modifié la réponse AJAX pour éviter toute manipulation ultérieure par le framework MVC

if (Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
    Context.Response.Write( "<?xml version='1.0' encoding='ISO-8859-1'?>"+
                            "<note>"+
                            "</note>";
    Context.Response.End(); // Calling End here should complete the response.
 }
 else {
            // ... other stuff
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X