Является ли открытый ключ VAPID таким же, как на стороне приложения applicationServerKey?
На стороне клиента, чтобы подписаться на веб-push-уведомления, вам нужно позвонить subscribe
с applicationServerKey
вариант, вот так:
var serviceWorkerRegistration = ...
serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlB64ToUint8Array("......")
}).then(function(subscription) {
...
})
Вы можете отправить subscription
объект на сервер, где его можно сохранить.
Чтобы отправить push-сообщение подписчику, серверу необходимо выполнить публикацию по URL-адресу, указанному ключом. endpoint
в объекте subscription
, Сервер должен идентифицировать себя с провайдером (Mozilla или Google или кем-либо еще), используя VAPID. Например, используя библиотеку Python pywebpush
этот вызов будет сделан:
import pywebpush
pywebpush.webpush(
subscription,
data,
vapid_private_key="path_to_private_key.pem",
vapid_claims={"sub": "mailto:example@example.com"},
)
Вот мой вопрос:
Является ли личный ключ VAPID, используемый для отправки push-сообщения, тем, который соответствует открытому ключу, переданному в serviceWorkerRegistration.pushManager.subscribe
на стороне клиента? Или это относится к отдельной ключевой паре? Моя интуиция подсказывает мне, что она должна принадлежать к одной и той же паре клавиш, но термин VAPID упоминается только в том случае, когда речь идет об отправке push-сообщений, а не при подписке, поэтому я не уверен, что это предположение верно.
1 ответ
Да, он принадлежит к той же ключевой паре. Этот пост в блоге Web Push Interoperability Wins проясняет ситуацию:
Процесс довольно прост:
- Ваш сервер приложений создает пару открытый / закрытый ключ. Открытый ключ передается вашему веб-приложению.
- Когда пользователь выбирает получение толчков, добавьте открытый ключ к объекту опций вызова subscribe().
- Когда сервер приложений отправляет push-сообщение, включите подписанный веб-токен JSON вместе с открытым ключом.
В зависимости от того, какую библиотеку вы используете на сервере, вам может понадобиться закрытый ключ в другом формате. Например, pywebpush
для Python ожидает файл PEM с закрытым ключом VAPID EC2 или строку в формате DER и base64.