Пуш-уведомление веб-уведомления выдает 400 из python в Chrome

Я использую библиотеку pywebpush 1.4.0 для отправки веб-уведомлений из бэкэнда Django. Ключи, которые я использую, были получены с сайта https://web-push-codelab.glitch.me/. . Подписка вроде работает. Более того, я проверил это в Firefox, и там все работает нормально.

Я получаю следующую ошибку на стороне сервера при нажатии на Chrome:

Push failed: <Response [400]>: <HTML>
<HEAD>
<TITLE>UnauthorizedRegistration</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>UnauthorizedRegistration</H1>
<H2>Error 400</H2>
</BODY>
</HTML>

Странно то, что мой бэкэнд контролирует 3 домена, и push работает нормально даже для Chrome в одном домене и не работает в других. Я исключил следующие возможные проблемы:

Единственная возможность, которую я вижу, это если Chrome не разрешает push-уведомления в разных доменах из одного и того же бэкэнда. Кто-нибудь знает о таком ограничении или может помочь мне с любыми другими указателями здесь?

Примечание. Я использую разные ключи для всех трех доменов.

Вот код, который я использую для нажатия:

from pywebpush import webpush
webpush(subscription_info,
                data,
                vapid_private_key=vapid_private_key,
                vapid_claims={"sub": "mailto:[email protected]"})

«Информация о подписке» — это json, полученный при подписке пользователя, а «vapid_private_key» — это соответствующий закрытый ключ.


person Avinash Gupta    schedule 24.04.2018    source источник
comment
Каналы Django могут реализовать эту функцию.   -  person Hayden    schedule 03.05.2018
comment
Вопрос не в реализации. Как я уже сказал, он отлично работает в Firefox и для одного из доменов в Chrome. Проблема заключается в обработке нескольких доменов в Chrome.   -  person Avinash Gupta    schedule 03.05.2018


Ответы (1)


В разделе FAQ перечислены следующие причины. по вашей ошибке (цитата):

  • Если вы не можете определить заголовок авторизации в запросе к FCM.
  • Ключ вашего приложения, используемый для подписки пользователя, не соответствует ключу, используемому для подписи заголовка авторизации.
  • Срок действия недействителен в вашем JWT, т. е. срок действия превышает 24 часа или срок действия JWT истек.
  • JWT имеет неверный формат или имеет недопустимые значения.

В нем также указано требование добавления applicationServerKey к запросу, и что это не обязательно в Firefox. Ваша проблема может заключаться в следующем: вы уверены, что переменная vapid_private_key относится к правильному закрытому ключу для каждого домена? Возможно, это действительно ключ вашего рабочего домена.

Было бы легче найти некоторые потенциальные ошибки, если бы у нас было больше кода, который вы использовали. Chrome просто нужен один ключ на сервер, но он должен иметь возможность обрабатывать подписку на несколько разных серверов.

person Martijn    schedule 04.05.2018