Безопасный веб-крюк - PullRequest
       44

Безопасный веб-крюк

1 голос
/ 31 января 2020

Мне нужно создать webhook от typeform до firebase. Я создам облачную функцию для прослушивания событий, отправленных с typeform. Форма типа управляется третьей стороной.

Единственная проблема, с которой я столкнулся, - это часть авторизации для webhook. Я понял (из прочтения другого поста), что любой может «поговорить» с URL-адресом облачной функции. Но я хотел бы иметь безопасную и эксклюзивную связь между typeform и firebase.

Любые намеки?

Спасибо за ваше время.

1 Ответ

2 голосов
/ 31 января 2020

Вы можете окончательно подключить веб-крючок Typeform к функции Cloud и отправить данные sh в хранилище Firebase.

В дополнение к аутентификации, на которую указывает Фрэнк, Typeform также предоставляет механизм подписи, обеспечивающий получение запроса от Typeform webhook.

Typeform позволяет вам определить секрет для подписи полезной нагрузки webhook.

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

Вот пример для проверки подписи webhook:

app.post('/typeform/webhook', async (request, response) => {
  console.log('~> webhook received');
  // security check, let's make sure request comes from typeform
  const signature = request.headers['typeform-signature']
  const isValid = verifySignature(signature, request.body.toString())
  if (!isValid) {
        throw new Error('Webhook signature is not valid, someone is faking this!');  
  }

  //valid signature let's do something with data received

})

А вот verifySignature функция

const crypto = require('crypto')
const verifySignature = function(receivedSignature, payload){
      const hash = crypto
        .createHmac('sha256', webhookSecret)
        .update(payload)
        .digest('base64')
      return receivedSignature === `sha256=${hash}`
    }

Более подробная информация о Документация по типу .

Надеюсь, это поможет:)

...