Гарантия того, что никто, кроме Google Wallet, не сможет выполнять успешные обратные вызовы для покупок в приложении.

Я планирую использовать Google Wallet (покупка в приложении) для продажи подписок на мое веб-приложение. Кошелек вызывает мой сервер обратно (на основе JWT), который генерирует мой сервер .

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

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

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

Приложение представляет собой приложение Python WSGI, работающее под Apache (конечно, SSL).

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


person Devraj    schedule 09.03.2013    source источник


Ответы (1)


Обратите внимание, что постбэк JWT подписан вашим секретом продавца. Только вы и Google знаете секрет продавца. Вы проверяете подлинность JWT постбэка, гарантируя, что он подписан с секретом продавца (подробнее ниже).

Также обратите внимание, что JWT обратной передачи отличается от JWT заказа, сгенерированного вашим сервером, поскольку он также содержит идентификатор заказа. Хакер не сможет повторно использовать JWT заказа для создания действительного JWT обратной передачи, не зная секрета продавца.

Когда вы получите обратный JWT, вы можете убедиться, что он отправлен Google, проверив подпись. JWT состоит из "Header.Claims.Signature". «Подпись» генерируется с использованием алгоритма SHA-256 с использованием секрета продавца.

Дополнительные сведения и примеры кода см. в следующих разделах:

Спецификация JWT: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#anchor4

Пример Python: https://developers.google.com/commerce/wallet/digital/docs/samples#iap-py

Декодер JWT: https://developers.google.com/commerce/wallet/digital/docs/jwtdecoder

person Mihai Ionescu    schedule 09.03.2013