Bug #81211
Middleware : mauvaise détection d'une requête ajax
0%
Description
De #81141#note-4, une requête ajax faite depuis wcs vers combo qui n'est pas détectée comme étant ajax, mellon qui tente une authentification passive et échec.
A lire le code il me semble que ça a du marcher via :
# Skip AJAX requests if request.headers.get('x-requested-with') == 'XMLHttpRequest': return
Mais là point de 'x-requested-with' dans la requête, j'imagine que ça vient d'une évolution de JQuery et que du coup la solution n'est pas du tout dans mellon, mais ce ticket en première approche pour ça ne se perde pas dans les limbes.
Potentiellement des problèmes dans combo où on voit :
def is_ajax(request): return request.headers.get('x-requested-with') == 'XMLHttpRequest'
Demandes liées
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a 8 mois
À mon avis on devrait rajouter ça maintenant:
sec_fetch_mode = request.headers.get('sec-fetch-mode') if sec_fetch_mode and sec_fetch_mode != 'navigate': return
Mis à jour par Benjamin Dauvergne il y a 8 mois
Mais je me demande quand même comment on fait pour personnaliser le template d'une brique en fonction du statut connecté ou pas d'un utilisateur si une cellule est chargée en ajax, visiblement ça ne marchera jamais si on est pas d'abord connecté au portail. J'ai l'impression qu'on a déjà cette discussion qui avait peut-être menée à détecté ces appels ajax dans mellon.
Mis à jour par Emmanuel Cazenave il y a 8 mois
Benjamin Dauvergne a écrit :
À mon avis on devrait rajouter ça maintenant:
[...]
Ça marcherait sur mon exemple, la requête est faite avec :
Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: same-site
Mis à jour par Emmanuel Cazenave il y a 8 mois
Benjamin Dauvergne a écrit :
visiblement ça ne marchera jamais si on est pas d'abord connecté au portail.
Oui même analyse ici avec Thomas N.
Sinon juste avant ton message, je m'apprêtais à suggérer de passer systématiquement un ?no-passive-auth
dans combo.public.js::combo_load_cell sur l'idée qu'une authent passive ne peut pas marcher en ajax.
Mis à jour par Benjamin Dauvergne il y a 8 mois
- Assigné à
Benjamin Dauvergnesupprimé
Emmanuel Cazenave a écrit :
Sinon juste avant ton message, je m'apprêtais à suggérer de passer systématiquement un
?no-passive-auth
dans combo.public.js::combo_load_cell sur l'idée qu'une authent passive ne peut pas marcher en ajax.
Si vous voulez, mais c'est pas le bon projet :)
Mis à jour par Robot Gitea il y a 8 mois
- Statut changé de Nouveau à Solution proposée
- Assigné à mis à Benjamin Dauvergne
Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/django-mellon/pulls/8
- Titre : middleware: check ajax request with sec-fetch-mode header header (#81211)
- Modifications : https://git.entrouvert.org/entrouvert/django-mellon/pulls/8/files
Mis à jour par Benjamin Dauvergne il y a 8 mois
Emmanuel Cazenave a écrit :
Benjamin Dauvergne a écrit :
visiblement ça ne marchera jamais si on est pas d'abord connecté au portail.
Oui même analyse ici avec Thomas N.
Je dis ça parce qu'en première analyse je voulais autoriser le passage des requêtes CORS sur /idp/saml2/sso/, car en vrai c'est ça qui bloque, le fait que le endpoint de SSO SAML n'ajoute pas l'entête Allow-CORS (à faire sélectivement certainement, genre en testant que l'entête Origin match le domaine du service SAML demandeur et en posant Allow-CORS: header['origin']). Ce ticket c'est pour garder le statu-quo actuel, c'est déjà bien.
Mis à jour par Robot Gitea il y a 8 mois
- Statut changé de Solution proposée à Solution validée
Emmanuel Cazenave (ecazenave) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a 7 mois
- Statut changé de Solution validée à Résolu (à déployer)
Benjamin Dauvergne (bdauvergne) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/django-mellon/pulls/8
- Titre : middleware: check ajax request with sec-fetch-mode header header (#81211)
- Modifications : https://git.entrouvert.org/entrouvert/django-mellon/pulls/8/files
Mis à jour par Transition automatique il y a 7 mois
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Benjamin Dauvergne il y a 7 mois
- Lié à Development #82266: idp_saml2: autoriser les requêtes CORS sur /idp/saml2/sso/ ajouté
middleware: check ajax request with sec-fetch-mode header header (#81211)