2 votes

Forcer les utilisateurs à se reconnecter après la suppression de la session dans l'authentification Windows - ASP.Net

Les exigences sont les suivantes :

Après la fermeture de la session, renvoyer l'utilisateur à la page d'accueil et le forcer à se reconnecter en utilisant la boîte de dialogue d'authentification Windows.

Situation actuelle :

J'ai un minuteur de compte à rebours en javascript qui, lorsqu'il arrive à 0, affiche une alerte indiquant que la session est terminée. Ce que je veux pouvoir faire, c'est, soit via JavaScript soit via un postback au serveur, effacer les informations d'identification de l'utilisateur

Ce que j'ai lu/essayé :

Envoi AJAX au serveur en définissant HttpContext.Response, et en lançant une HttpException(401)

    [HttpPost]
    public ActionResult ForceRelogin()
    {
        //HttpContext.Response.StatusCode = 401;
        //HttpContext.Response.End();
        //return RedirectToAction("Index", "Home");
        //throw new HttpException(401, "");
        return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
    }

Aucun de ces deux méthodes ne semble fonctionner avec AJAX, et je ne sais pas comment déclencher un simple envoi au serveur vers une action du contrôleur qui ne suppose pas de soumission.

Question :

Comment puis-je contraindre les utilisateurs à réauthentifier leurs informations d'identification Windows, sans utiliser Active-X ou modifier les paramètres de leur navigateur IE? Question bonus : Comment faire un postback depuis javascript vers une action du contrôleur MVC sans utiliser de soumission ou d'AJAX ?

0voto

Sean Points 496

Voici quelques exemples de mes commentaires.


Si vous pouviez vous en sortir avec une requête GET -

Contrôleur:

[HttpGet]
public ActionResult ForceRelogin()
{
    // Pourriez-vous peut-être simplement jeter une nouvelle exception HttpException non autorisée ?
    // throw new HttpException(401, "Interdit");
    // Mais essayez d'invalidé la session puis de rediriger vers la page de connexion
    return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
}

Javascript:

   ...

   var redirectToLogin = function() { 
      window.location.href = "http://foo.com/login/ForceRelogin";
   }

   ...

OU si vous deviez le faire avec un POST, alors faites : Contrôleur:

[HttpPost]
public ActionResult ForceRelogin()
{
    // Pourriez-vous peut-être simplement jeter une nouvelle exception HttpException non autorisée ?
    // throw new HttpException(401, "Interdit");
    // Mais essayez d'invalidé la session puis de rediriger vers la page de connexion
    return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
}

Javascript & Html:

   ...

   var redirectToLogin = function() { 
      var form = document.getElementById("formFoo");
      form.submit();
   }

   ...

   ...

Je ne suis pas tout à fait sûr de comment vous pourriez invalider la session de l'utilisateur ? Renvoyer un code d'erreur non autorisé peut vous aider à rediriger vers la page de connexion, mais l'utilisateur pourrait appuyer sur le bouton retour et continuer à naviguer. Si cela ne vous préoccupe pas, vous pouvez tout aussi bien rediriger directement l'utilisateur vers la page de connexion. J'ai trouvé ce post, et peut-être devrez-vous suivre une approche similaire, fondamentalement il s'agit d'envoyer une tentative de connexion invalide : Déconnexion d'un utilisateur lors de l'utilisation de l'authentification de base HTTP

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