Depuis au moins quelques années, j'utilise un code similaire à celui-ci dans mes solutions MVC ...
[Authorize]
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
..........
Puis dans mon code d'authentification
myAuthenticationProperties = new Microsoft.Owin.Security.AuthenticationProperties();
myAuthenticationProperties.AllowRefresh = true;
myAuthenticationProperties.ExpiresUtc = DateTime.UtcNow.AddMinutes(60);
myAuthenticationManager.SignIn(myAuthenticationProperties, myClaimsIdentity);
return RedirectToAction("Index", "Home");
Et dans ma Startup ..
public void Configuration(IAppBuilder app)
{
CookieAuthenticationOptions myAuthOptions = new CookieAuthenticationOptions();
myAuthOptions.AuthenticationType = "ApplicationCookie";
myAuthOptions.CookieHttpOnly = true;
myAuthOptions.SlidingExpiration = true;
myAuthOptions.LoginPath = new PathString("/Authentication/LogIn");
//This is what was added for the Owin cookie "fix"
myAuthOptions.CookieSameSite = SameSiteMode.Strict;
myAuthOptions.CookieSecure = CookieSecureOption.Always;
app.UseCookieAuthentication(myAuthOptions);
}
Et la vie a été dandy ... jusqu'à maintenant. J'ai cherché ma queue partout en essayant de comprendre pourquoi quand j'essaye de me connecter, parfois ça marche, et d'autres fois ça se bloque. En utilisant certains messages de débogage, j'ai trouvé que mon processus d'authentification se termine, mais lorsque la RedirectToAction se produit, rien ne se passe ... se bloque simplement.
Ensuite, j'ai eu une percée, j'ai essayé d'utiliser IE et Edge et cela semble fonctionner à chaque fois. Seul Chrome se bloque et il le fait au moins 75% du temps, sinon plus.
** METTRE À JOUR **
J'ai utilisé à la fois Fiddler et le débogage de Chrome (onglets Console et Réseau) et lorsque la RedirectToAction se produit, en ce qui concerne le site Web, elle est effectuée. Cependant rien, et je ne veux rien dire, ne revient sur le réseau à mon client (selon Fiddler et Chrome's Networking).
Pourtant, si je change manuellement l'url pour rentrer à la maison, Chrome est heureux, je suis maintenant authentifié et mon [Authorize] permet maintenant au contrôleur de se charger.
J'ai regardé dans la nouvelle chose de cookie Chrome, et bien que le «correctif» semble être aussi clair que de la boue, j'ai pu trouver quelqu'un qui a utilisé du code pour forcer le cookie SameSite à signaler autre chose que LAX. J'ai implémenté cela, en l'ayant réglé sur "Strict" et toujours .... Chrome se bloque.
** Le pansement **
Je ne sais pas combien de temps cela va m'acheter, mais j'ai résolu le problème en utilisant un minuteur Javascript qui lorsque l'utilisateur clique sur le bouton d'envoi, le minuteur démarre, attend 6 secondes, puis redirige vers la page d'accueil /Indice.
Si le problème n'est pas là (IE, Edge), le client redirige automatiquement avant que le minuteur n'ait une chance de s'installer. S'ils utilisent Chrome et qu'il décide de se bloquer, 6 secondes plus tard, il se comportera comme si leur navigateur était juste lent et les amènera également au bon endroit.
** Fixé (peut-être) **
Ainsi, même si aucun trafic réseau ne peut être vu revenir au client, j'ai fini par (en plus de mon pansement ci-dessus), implémenter des modifications supplémentaires, donc maintenant les cookies Owin et Asp.net signalent Secure et sameSite = Strict . Cela semble faire une différence avec mon problème, et dans les cas où il veut toujours se bloquer, ma redirection chronométrée termine le problème.
Pour ceux qui peuvent également rencontrer cette bizarrerie, l'essentiel du correctif Cookie est le suivant ...
Mettez à jour ce qui suit dans votre Web.config pour rendre votre cookie Asp.net compatible
<system.web>
<sessionState cookieSameSite="Strict" />
<httpCookies requireSSL="true" />
</system.web>
Faire ces 3 choses (ainsi que l'exécution de votre projet sous SSL) entraînera Chrome signalant à la fois les cookies comme sécurisés et stricts.
Google a modifié la manière dont Chrome gère les cookies sans l' SameSite
attribut. Auparavant, Chrome considérait que ne pas avoir l' SameSite
attribut défini sur un cookie était identique à avoir SameSite=None
, ce qui signifiait que le navigateur acceptait tous les cookies. Maintenant, ils le traitent comme ayant SameSite=Lax
, ce qui n'acceptera que les cookies du même domaine. Pour obtenir le même effet que l'ancienne méthode, l'attribut doit être défini sur SameSite=None; Secure
.
Je ne peux pas dire si c'est ce qui vous affecte, mais si c'est le cas, vous verrez une erreur dans la console Chrome.
La sortie officielle était le 4 février IIRC, mais ils font un déploiement par étapes pour juger des problèmes causés.
Quelques ressources:
Blog Microsoft ASP.NET sur les changements à venir / Copie archivée
Blog Chromium / Copie archivée
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots