Я нарисую решение взломщика.Игнорируя безопасность на данный момент, предположительно поток мог пойти примерно так.
- Пользователь заходит на сайт X и что-то покупает
- Перед завершением покупки они перенаправляют на вашу страницу входа с идентификатором транзакции GET / POST и URL-адресом перенаправления
- Вы входите в систему, создавая уникальный идентификатор обратного вызова, переданный через HTTP, и перенаправляете на страницу их корзины
- Транзакция завершена, они нажимают REST API на вашем сайте, чтобы указать, что транзакция завершена, и включают стоимость
Принимая во внимание безопасность, мы должны рассмотреть возможные места, где мы можем подделать транзакцию
- Самозванец передает поддельный идентификатор на шаге 2).Это не должно быть проблемой, поскольку клиентский сайт предположительно может проверить действительность идентификатора транзакции
- Impostor принимает идентификатор обратного вызова в # 3 и передает его в API, создавая ложную транзакцию.Для этого мы можем зашифровать идентификатор обратного вызова на хост-сервере (в дополнение к тому, какой SSL-протокол находится между веб-сервером и клиентом), затем он дешифруется на клиентском сайте и передается (через SSL) в незашифрованном виде в REST API хоста.
Короче говоря, клиент должен иметь возможность
- Принять / сгенерировать параметры
- Расшифровать строку
- Вызвать произвольныйURL, чтобы попасть в интерфейс REST (или каким-либо образом уведомить узел хоста об обратном вызове, очевидно, не через перенаправление, так как это покажет идентификатор).
Одним из преимуществ этого подхода является то, что 2/3 может выполняться асинхронно.Если их хостинговое решение не допускает пользовательский код, вы можете предоставить скрипт, который будет пакетировать и отправлять его через различные промежутки времени, если они где-нибудь сохранят информацию.