Bug #65858
WebPushException: WebPushException: Push failed: 401 Unauthorized
0%
Description
https://sentry.entrouvert.org/entrouvert/publik/issues/54248/
(peut-être garder un décompte et quand ça arrive n fois pour le même utilisateur supprimer l'autorisation push).
Notification.DoesNotExist: Notification matching query does not exist. File "django/db/models/query.py", line 554, in update_or_create obj = self.select_for_update().get(**kwargs) File "django/db/models/query.py", line 408, in get self.model._meta.object_name WebPushException: WebPushException: Push failed: 401 Unauthorized File "combo/apps/pwa/signals.py", line 62, in notification vapid_claims=claims, File "__init__.py", line 404, in webpush response=response) webpush error ("WebPushException('Push failed: 401 Unauthorized')")
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a plus d'un an
En fait les notifications webpush ne marchent plus sur firefox, du tout je pense. J'ai modifié le code sur combo.node1.test-hds pour avoir un peu plus de la réponse 401 dans l'exception et ça donne ça :
https://sentry.entrouvert.org/entrouvert/gplexpert/issues/96671/ webpush error ("WebPushException('Push failed: 401 Unauthorized b'{\"code\":401,\"errno\":109,\"error\":\"Unauthorized\",\"message\":\"Invalid VAPID token: A value in the vapid claims is either missing or incorrectly specified (e.g. \\\\\"exp\\\\\":\\\\\"12345\\\\\" or \\\\\"sub\\\\\":null). Please correct and retry.\",\"more_info\":\"http://autopush.readthedocs.io/en/latest/http.html#error-codes\"}'')")
Sous chrome les jetons JWT produits ne posent, visiblement, pas de souci.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
On est en 1.7.0 pour pywebpush mais la dernière est la 1.14.0 qui contient ces corrections :
## 1.14.0 (2021-07-28) bug: accept all VAPID key instances (thanks @mthu) ## 1.13.0 (2021-03-15) Support requests_session param in webpush fn too ## 1.12.0 (2021-03-15) chore: library update, remove nose tests ## 1.11.0 (2020-04-29) feat: add –head to read headers out of a json file (thanks @braedon) ## 1.10.2 (2020-04-11) bug: update min vapid requirement to 1.7.0 ## 1.10.1 (2019-12-03) feat: use six.text_type instead of six.string_types ## 1.10.0 (2019-08-13) feat: Add –verbose flag with some initial commentary bug: Update tests to use latest VAPID version ## 1.9.4 (2019-05-09) bug: update vapid exp header if missing or expired
J'ai dans l'idée qu'une mise à jour corrigerait le problème.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Fichier 0001-pwa-set-an-explicit-exp-claim-in-vapid-JWT-token-658.patch 0001-pwa-set-an-explicit-exp-claim-in-vapid-JWT-token-658.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
On pourra donc vraisemblablement se passer d'une mise à jour pour l'instant avec ce patch, testé sur combo.node1.test-hds.saas.entrouvert, les notifications vers firefox passent sans erreur. Mais je conseillerai quand même de mettre à jour pywebpush et py-vapid.
Mis à jour par A. Berriot il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Je manque de contexte et ne connais pas bien webpush, si je comprends bien tu sette une expiration a now + 3h. Ça ne risque pas de faire sauter les notifications au bout de 3h ?
(je valide nonobstant)
Mis à jour par Benjamin Dauvergne il y a plus d'un an
Agate Berriot a écrit :
Je manque de contexte et ne connais pas bien webpush, si je comprends bien tu sette une expiration a now + 3h. Ça ne risque pas de faire sauter les notifications au bout de 3h ?
(je valide nonobstant)
C'est juste la validité du token d'authentification (c'est comme un idtoken en OpenID Connect), il est consommé immédiatement à l'appel du serveur de push (enfin je pense), comme on le génère à chaque push1 je ne pense pas que ça pose un problème.
1 le code est là https://github.com/web-push-libs/pywebpush/blob/main/pywebpush/__init__.py#L443 ça prends les claims vapid et ça crée un header Authorization: Vapid <token>
qui ressemble comme deux gouttes d'eau à du Bearer
+ JWT .
La RFC de ce truc est là, https://www.rfc-editor.org/rfc/rfc8292, mais visiblement cette authentification n'est même pas requise. Elle sert seulement à fournir une identité stable dans le cas où on abuserait du service et/ou quelqu'un se ferait passer pour nous et pour nous envoyer des alertes par mail dans ce cas, d'ailleurs on ne devrait pas y mettre l'adresse from par défaut, que personne ne lit, mais plutôt un truc où on peut recevoir des mails (genre publik-push-<hostname>@entrouvert.com) pour le suivi
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de Solution validée à Résolu (à déployer)
commit 8d01db8f41392157a18cf396ab679dff4bf1d921 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Tue Nov 1 09:21:23 2022 +0100 pwa: set an explicit exp claim in vapid JWT token (#65858)
Mis à jour par Transition automatique il y a plus d'un an
- Statut changé de Résolu (à déployer) à Solution déployée
pwa: set an explicit exp claim in vapid JWT token (#65858)