2014-02-17 1 views
6

В моем приложении ruby-on-rails используется полоса для карточных платежей. У Stripe есть положение webhooks, через которое он обращается к моему приложению, и дает подробную информацию о каждой транзакции - с успехом или неудачей.Проверка подлинности веб-камеры Strub - Ruby

Для этого у меня есть в моем контроллере что-то вроде этого:

class StripeController < ApplicationController 
    def webhook 
    data_json = JSON.parse request.body.read 
    p data_json['data']['object']['customer'] 
    end 

Мой вопрос, как я могу подтвердить подлинность этого webhook? К моим знаниям и пониманию можно легко подражать этому (нападение «человек-в-середине»).

ответ

9

От Stripe-х webhooks documentation:

Если речь идет о безопасности, или если это важно, чтобы подтвердить, что нашивки послал webhook, вы должны использовать только идентификатор послана в вашем webhook и должен запросить оставшиеся детали из Stripe API напрямую.

8

Драгоценный камень stripe_event покрыт другим способом.

Securing your webhook endpoint выполнен с использованием базовой HTTP-аутентификации в stripe_event gem.

Если только Stripe знает базовый пароль аутентификации, это гарантирует, что запрос действительно поступает из Stripe. Вот что вы делаете:

  1. Упорядочить секретный ключ, который будет доступен в переменных среды приложения или в файле secrets.yml.

  2. Настройка StripeEvent требовать этой тайны можно использовать в качестве основного пароля аутентификации, используя код вдоль линий:

    StripeEvent.authentication_secret = ENV['STRIPE_WEBHOOK_SECRET']

  3. При указании URL вашего webhook в в настройках Stripe, в включает секрет в виде пароль в URL, а также с любым именем:

    https://stripe:[email protected]/my-webhook-path

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

1

Вы можете включить basic http authentication для полосы webhook событий, установив webhook к следующему адресу

https://username:[email protected]/my-webhook-path 

Это приведет к Authorization заголовка со значением

Basic encode64(username:password) 

, например, путем установки веб-сайт на следующий URL-адрес

https://admin:[email protected]/my-webhook-path 

вы получите этот заголовок во входящем запросе

Basic YWRtaW46MTIzNDU2 
Смежные вопросы