Chrome ne redirigera pas vers l'URL après la gestion de l'authentification

da_jokker

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

  1. Mettez à jour vos packages Owin pour vous assurer que vous utilisez la version 4.1
  2. Ajustez vos CookieAuthenticationOptions dans votre Startup.cs aux éléments que j'ai ajoutés ci-dessus pour rendre le cookie Owin compatible.
  3. 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.

Nathan Miller

Google a modifié la manière dont Chrome gère les cookies sans l' SameSiteattribut. Auparavant, Chrome considérait que ne pas avoir l' SameSiteattribut 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.

Avertissement de la console Chrome <code> SameSite </code>.

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Express ne redirigera pas après l'authentification du passeport

L'authentification par formulaire dans l'API ne fonctionne pas après la migration de l'application cliente vers l'authentification Azure

la déconnexion de l'utilisateur avec le bouton de déconnexion ne redirigera pas continue vers le fichier php au lieu de l'index

Le composant React ne s'affiche pas après la vérification de l'authentification

React Router ne redirigera pas en fonction de l'état

L'expiration de l'authentification des cookies ne redirige pas vers la page de connexion

La déconnexion de Django Rest Framework ne fonctionne pas après l'authentification par jeton

L'authentification ne fonctionne pas après la modification des options de cookie

Chrome webRequest onBeforeRequest ne redirigera pas après avoir reçu le retour de fonction

Ionic ne navigue pas vers l'URL spécifiée après la notification push

Django après l'échec de la connexion, la page ne redirige pas vers la suivante

L'URL de l'image ne s'affiche pas après la sélection du fichier

L'interface utilisateur Web NiFi ne s'ouvre pas après l'activation de l'authentification

La redirection vers l'URL précédente après la connexion / l'enregistrement ne fonctionne pas

L'application Meteor ne fonctionne pas dans Chrome probablement après la mise à jour de Chrome

Après la mise à jour vers la version 74 de Google Chrome, data-toggle="collapse" ne peut pas rester à moitié lors de l'effondrement

Zuul Routing ne redirige pas vers l'URL donnée après l'application du filtre de sécurité

gsutil ne peut pas copier vers s3 en raison de l'authentification

L'URL ne change pas après l'utilisation de subDays () dans la lame - Laravel

redirection vers la page d'origine après l'échec de l'authentification avec Spring Security

GDB Cygwin ne redirigera pas la sortie vers un fichier

Le service Mongodb 4 ne démarre pas après la configuration de l'authentification - Erreur 1053

Obtenir les données des utilisateurs depuis la base de données Firebase ne fonctionne pas après l'authentification

Passport.js ne redirige pas après l'authentification de l'utilisateur

L'administrateur de Django ne se connecte pas après l'authentification personnalisée

Chrome ne fonctionne pas après l'installation de JDK

L'URL ne change pas après la redirection

Rediriger l'URL MVC vers la page de connexion si l'utilisateur ne s'est pas connecté

L'authentification AAD ne fonctionne pas depuis la mise à jour de Visual Studio 2017 vers la version 15.7.4

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    comment obtenir un objet de requête dans les tests unitaires de django?

  3. 3

    mongo kafka connect source

  4. 4

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  5. 5

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  6. 6

    Comment ajouter un texte dans un texte Python/Tkinter

  7. 7

    Aide de variable de débogage pprint jinja2

  8. 8

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  9. 9

    Impression de la longueur du chemin le plus court dans le labyrinthe

  10. 10

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  11. 11

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  12. 12

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  13. 13

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  14. 14

    définir une propriété pour chaque nœud dans neo4j

  15. 15

    Pourquoi cette requête Java échoue-t-elle? renvoyer 0 quand il y a des résultats

  16. 16

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  17. 17

    Laravel 8: Attempt to read property "id" on null

  18. 18

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  19. 19

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  20. 20

    Microsoft.WebApplication.targets

  21. 21

    obtenir le nombre de marqueur affiché sur la carte

chaudétiquette

Archive