как получить токен jwt в сервисном работнике - PullRequest
2 голосов
/ 02 мая 2020

Я пытаюсь реализовать уведомление pu sh (API Pu sh). Я только хочу, чтобы вошедшие в систему пользователи могли получать уведомления.

Одним из событий, которое мне нужно реализовать, является pushsubscriptionchange в моем сервисном работнике, чтобы я знал, что он был изменен, и я должен сделать fetch запрос в мою базу данных. У меня есть текущие параметры подписки old и new, но проблема, с которой я сталкиваюсь, заключается в том, что у меня нет маркера jwt при отправке этого запроса. Это означает, что конечная точка API в этом случае остается небезопасной, и любой может выполнить ее с подпиской old и new.

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

Я ищу лучшую практику:

  • поместите jwt в indexeddb в коде моего приложения, а затем в сервисном работнике, возьмите его с indexeeddb. Это начинает вызывать проблемы, потому что когда пользователь выходит из системы, я должен извлечь его из indexeddb, когда обновляется токен jwt, я должен также обновить sh в indexeddb. кто знает, какие ошибки он собирается внести.

  • другое решение, о котором я могу подумать, - когда пользователь входит в систему, у меня есть код, который отписывается от него и затем подписывается на него. Таким образом, это кажется довольно простым, потому что кто-то другой никогда не получит мою подписку так легко Хотя я не уверен, что это правильный путь к go.

что вы думаете?

1 Ответ

0 голосов
/ 02 мая 2020

Чтобы использовать JWT для аутентификации, я считаю, что ваш "обычный JavaScript" (не Service Worker) уже имеет доступ к токену доступа и включает его во все запросы от клиента к серверу. Обычно этот токен доступа находится в JS памяти (некоторая переменная или около того) и затем присоединяется к запросам.

Чтобы вставить JWT в SW для обмена данными API, вы должны использовать API postMessage (* 1003) *https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage). При этом вы можете обмениваться данными между кодом, выполняющимся внутри ПО, и на странице.

Вы можете отправить сообщение на страницу с ПО, чтобы запросить токен, и затем отправить на страницу JS send. это к ПО, которое может, в свою очередь, использовать его для аутентификации. Или вы можете отправить любую информацию, которую ПО получает из события изменения подписки, на страницу и сделать так, чтобы страница выполняла вызовы API.

...