Projet

Général

Profil

Bug #65858

WebPushException: WebPushException: Push failed: 401 Unauthorized

Ajouté par Sentry Io il y a presque 2 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
01 juin 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Révision 8d01db8f (diff)
Ajouté par Benjamin Dauvergne il y a plus d'un an

pwa: set an explicit exp claim in vapid JWT token (#65858)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 2 ans

  • Projet changé de Suivi des traces à Combo
#2

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.

#4

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.

#5

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Assigné à mis à Benjamin Dauvergne
#6

Mis à jour par Benjamin Dauvergne il y a plus d'un an

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.

#7

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Tracker changé de Development à Bug
#8

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)

#9

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

#10

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)
#11

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#12

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF