donc j'ai un travail autour de cela, si quelqu'un a une meilleure idée s'il vous plaît ne hésitez pas à commenter. Essentiellement, vous devez intercepter la réponse à la fin de la requête et définir manuellement la propriété Secure sur le cookie d'authentification des formulaires, ce qui est assez évident, vous devrez également définir la propriété requireSSL dans la configuration d'authentification des formulaires sur false. Gardez également à l'esprit que nous ne voulons pas activer HTTPS pour l'ensemble du site pour les utilisateurs authentifiés, d'où ce travail.
Il y a quelques mises en garde à cette approche et quelques éléments à connaître.
J'ai trouvé au cours des essais que le cookie d'authentification a toujours été écrit dans la réponse, donc je continuais d'écraser le cookie d'authentification valide dans le navigateur avec un cookie d'authentification vide, pour contourner ce que j'ai inclus une certaine logique dans le module HTTP pour contourner ce problème, voir l'extrait de code ci-dessous.
Toutes les demandes à l'application nécessitant une autorisation doivent être sous SSL, sinon la demande ne contiendra pas le cookie d'authentification afin d'authentifier l'utilisateur. Parce que vous ne passez que le cookie d'authentification pour les demandes SSL, vous aurez besoin d'un autre mécanisme pour indiquer à votre application que l'utilisateur actuel est authentifié quand il navigue dans les zones non SSL du site, j'ai implémenté ceci avec un cookie supplémentaire qui est défini lorsque l'utilisateur se connecte et n'a pas de date d'expiration définie, expirera donc à la fin de la session des utilisateurs, bien sûr ce cookie est supprimé si l'utilisateur se déconnecte.
est inférieure à la logique mise en oeuvre dans un module HTTP pour affecter ce qui précède, j'ai testé ce dernier quelques heures et n'ont pas rencontré de problèmes encore, je ne manquerai pas de mettre à jour ce poste si je faire!
Nous ne devrions jamais envoyer un cookie d'authentification au client si l'utilisateur vient connecté est ici la logique
- Si la demande a un cookie d'authentification de l'utilisateur est déjà authentifié et sous SSL Assurez-vous donc de ne pas envoyer un nouveau cookie d'authentification dans la réponse .
- Si la requête ne possède pas de cookie d'authentification mais qu'un cookie d'authentification est valide dans la réponse, définissez le cookie d'authentification de réponse à sécuriser, afin qu'il soit uniquement transmis par le navigateur sous SSL.
- Si la demande n'a pas de cookie d'authentification et que la réponse contient un cookie d'authentification invalide ou vide, assurez-vous de supprimer le cookie de réponse pour ne pas remplacer le cookie valide dans le navigateur client.
private void EndRequest(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
if (ValidRequest(application.Request) && application.Response.Cookies.Count > 0)
{
//only do the below if the user is not logging out the site, if the user is logging out we can
//leave the default forms authentication behaviour which is to expire the auth cookie
if (application.Request.AppRelativeCurrentExecutionFilePath != "~/authentication/logoff")
{
var requestAuthCookie = application.Request.Cookies[FormsAuthentication.FormsCookieName];
var responseAuthCookie = application.Response.Cookies[FormsAuthentication.FormsCookieName];
if (requestAuthCookie != null && responseAuthCookie != null && responseAuthCookie.Value.IsNullOrEmpty())
{
application.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
}
else if (responseAuthCookie != null && !responseAuthCookie.Value.IsNullOrEmpty())
{
responseAuthCookie.Secure = true;
application.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
application.Response.Cookies.Add(responseAuthCookie);
}
else if (responseAuthCookie == null || responseAuthCookie.Value.IsNullOrEmpty())
{
application.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
}
}
}
}
+1, je serais également intéressé par les solutions à ce problème. –