Как правильно создать подписанную структуру webhook в Laravel? - PullRequest
0 голосов
/ 31 августа 2018

У меня в приложении есть веб-крючок (приложение 1), в котором периодически должно срабатывать другое из моих приложений (приложение 2), однако я обдумываю методологию, с помощью которой можно безопасно подписывать эти запросы, чтобы убедиться, что цель веб-крюка доступен только этим приложением. Я думал о следующем:

  • сохранить секретный хеш в env APP1 и при каждом отправлении запросов APP2 добавлять хеш в определенный заголовок для сравнения.

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

1 Ответ

0 голосов
/ 31 августа 2018

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

  1. APP1 генерирует хеш и сохраняет в файле ~ / secret_app_hash
  2. APP2 читает файл ~ / secret_app_hash и отправляет запрос с этим параметром
  3. APP1 получил HTTPS-запрос, проверяет хеш по файлу
  4. APP1 генерирует новый хеш ... в основном обратно к шагу 1

Таким образом, хеш никогда не используется повторно, и только APP1 и APP2 знают текущее значение хеша.

Другой подход, если системы не имеют одного и того же бэкенда, состоит в том, чтобы периодически генерировать новый хеш на основе некоторого секрета, который оба приложения знали: sha256 (SECRET + current_time_window), похожего на двухфакторную аутентификацию.

примечание, которое необходимо добавить: если вы используете HTTPS и POST-запрос, параметр не будет читаем для наблюдателей.

...