Токен CSRF из расширения браузера

У меня есть экспресс-приложение, использующее krakenjs/lusca для защиты от CSRF-атак, которое работает для всех маршрутов в моем домене. Однако у меня также есть расширение Chrome, которое я хотел бы использовать для POST в приложение из любого домена. Из моего исследования я считаю, что мне следует использовать аутентификацию на основе токенов, поэтому у меня есть два вопроса:

  1. Как мне сгенерировать и отправить этот токен в расширение, чтобы приложение могло аутентифицировать запрос от расширения?
  2. Как мне хранить этот токен с расширением?

Ответы, которые я нашел, касаются наличия API, к которому сервер отправляет запросы, и хранилища токенов, которое зависит от локального хранилища (что, я не думаю, решит мою проблему, поскольку расширение должно иметь возможность POST из произвольных доменов). Я ценю любую помощь! Спасибо.


person g_bradshaw    schedule 30.06.2016    source источник


Ответы (1)


  1. Вы не можете защитить свою конечную точку для расширения на 100%, но есть некоторые решения, чтобы ограничить ее использование другими людьми неожиданным образом. Самое простое решение — использовать JsonWebToken. Сервер зашифрует объект, имеющий предопределенную структуру, например {email: '[email protected]', created_date: new Date()}, и отправит его обратно в расширение. Когда сервер получает запросы расширения, он попытается расшифровать токен и проверить, являются ли данные действительными (в соответствии с предопределенным форматом), прежде чем отвечать. Для большей безопасности вы должны выполнить некоторую аутентификацию, например. позвольте пользователю сначала войти в Google, чтобы увидеть, действительно ли он является тем, за кого себя выдает, прежде чем выдавать токен... Я предлагаю вам изучить, как работают потоки OAuth2, чтобы получить ссылку!

  2. Есть несколько вариантов хранения токена в расширении. Я предпочитаю хранить его на chrome.storage.sync https://developer.chrome.com/extensions/storage#property-sync. Когда расширение загружается впервые, оно должно проверить, сохранен ли токен, и вызвать сервер, чтобы получить его, если его нет.

person phnkha    schedule 30.06.2016
comment
Спасибо phnkha, я ценю это. Одна вещь - должен ли я быть обеспокоен раскрытием маршрута на стороне сервера, который предоставляет jwt? - person g_bradshaw; 30.06.2016