Support #31842
pas d'authentification passive mellon dans Combo
0%
Description
Je fais le ticket ici, à ranger ensuite au bon endroit.
Si un formulaire wcs requiert l'authentification, l'usager est rédirigé vers authentic et revient ensuite sur le formulaire en étant connecté.
Si ensuite l'usager va sur Combo il peut ne pas être connecté.
C'est genant dans les cas ou le formulaire (et son workflow) ajoute des montants à payer dans le panier, et rédirige l'usager directement vers le paiement: Combo. Combo signale alors que l'usager n'est pas connecté.
Cela peut se produire dans des cas ou il y a des appels ajax pour récupérer les badges des cellules comme "Panier" ou "Notifications", instanciées quelque part dans Combo.
L'appel ajax passe par l'authentification passive, le cookie "MELLON_PASSIVE_TRIED" sans pourtant que l'authentification aboutisse.
Je joins un log HAR de Firefox qui illustre le parcours.
On voit à la fin Authentic faire une 302 avec :
Location: https://citoyen-combo.entrouvert.lan/accounts/mellon/login/?SAMLart=AAQAAIelNeK1%2BphtfdVV%2F6BObd7IOSNNRTQwMkFFMDU4MzAzNjQyOTk3RUQ%3D&RelayState=1a0033f7-c6d1-49c2-95ad-29497f9b1b32
mais le navigateur ne suit pas la rédirection et leve le message d'alerte:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://connexion-authentic.entrouvert.lan/idp/saml2/sso?SAMLRequest=jZNfT9swFMW%2FSmQJ3lLnTwuJlxQFWqRK24TGtIe9IONewFJiB99rWr49bquirJHQniL94nPPPcdJhbJre9F4ejG%2F4NUDUrTtWoNi%2F6Jm3hlhJWoURnaAgpS4b358F9kkEb2zZJVt2UDytUIigiNtzVECtmYvRD0KzjebzQQMOevfwqGJsh1n0WpRs4eiScvmcjktLpub5CLNkuJiObst8iS%2FTpo0y1n0BxyGsTULLkGE6GFlkKShgJK0jJM8zsrfSSmmhUjLvyxahKjaSNqrjisoawxsA4plaCQso9VwpVYartc93wXNOKJl0a11Cvb11exJtgg797uQU7%2FBkcyrnUDst3LzTy9N9h1MHHI%2B2lMXqZT1hpB30LbWhAfJtSTJKz6cVR2ub7klMLv8OK%2FAihCBHrxr%2F9Oq12G88fGjXD8D8qtePsPZ7PpstqjTc9n13wYgOwX5KZidgjQZkfHYMRk5ZSOrbFrxYdxDN%2F%2FWcSA%2Fw5e4WtzZVqv3qAmNbm4cSAo3RM4D45%2FS4Y8w%2FwA%3D&RelayState=1a0033f7-c6d1-49c2-95ad-29497f9b1b32&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=Pnwn6cNd%2BO9DiFFPy6%2BHvZ%2Fhy%2F6qcjM46si%2Bs3NzHf91jCM5AlUZl00mPibGX6klPpYlBPDWQoRcS%2BtsUvcPPEJetURAjtPtdv%2BZRA70ae5H0fREmzOa56DJSwPkd%2F5oyD%2BydpSHm7S2oqPO8%2FCkVDObfJE3PJiuuLL7TVF0Sxg%3D. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
Fichiers
Historique
Mis à jour par Frédéric Péters il y a presque 5 ans
CORS header ‘Access-Control-Allow-Origin’ missing
Peut-être pas ça mais au moins une piste, Authentic est particulier dans sa gestion dynamique de l'entête, cf src/authentic2/cors.py. (et on peut imaginer le navigateur ayant déjà fait une première requête et ayant mémorisé une valeur différente pour l'entête).
(les autres modules passent par hobo/middleware/cors.py qui tape tous les services déclarés dans Hobo dans l'entête).
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Authentic ne supporte pas les requêtes CORS en dehors de /api/user/, il me semble (le contenu de cors.py n'est utilisé que par le décorateur JSONP dans decorators.py, qui n'est utilisé que par un seul endpoint /api/user/).
Le seul truc qui marche c'est les chargements via <script/> comme sur les backoffice.
Je n'ai pas trop d'idée, soit on rend tout authentic CORS compatible avec un middleware, et je n'ai pas toutes les implications au niveau sécurité en tête, soit poupouf.
Mais en fait CORSMiddleware est aussi chargé par authentic donc je ne vois pas trop d'où vient le problème... peut-être faut-il déclarer explicitement le support des redirections (vague souvenir de la spécification CORS).
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Trouvé: https://developer.mozilla.org/fr/docs/Web/HTTP/CORS#Requ%C3%AAtes_pr%C3%A9liminaires_et_redirection
Mais comme CORSMiddleware passe avant PassiveAuthenticationMiddleware et court-circuite explicitement la génération des réponse il ne devrait pas y avoir de redirection sur les pré-requêtes... je suis perdu.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Serghei si tu peux chercher un peu plus pour voir où ça merde dans le circuit, c'est cool.