【问题标题】:Authenticating Google Wallet for Digital Goods postbacks为数字商品回发验证 Google 电子钱包
【发布时间】:2014-04-13 15:35:38
【问题描述】:

确保客户通过 Google Wallet for Digital Goods 进行的购买已经有效支付,客户依赖于out-从 Google 服务器到商家服务器的带外回传。显然,此时谷歌服务器发送的唯一参数是最初发送给客户端的原始 JWT 令牌,带有额外的订单 ID。任何客户都知道此 JWT 令牌。

如何确保此回发来自 Google?

我可能会漏掉一些东西,但是如果商家服务器使用简单的 URL(例如 postback.domain.com),攻击者很容易通过轮询来猜测它,然后使用原始 JWT 令牌发出虚假的付款确认调用,加上一个虚拟订单 ID。对我来说商家服务器无法确保回发是否有效。就安全性而言,使用带有一些嵌入式密钥的回调 URL 似乎是一种糟糕的解决方法。

这很奇怪,因为在回发中包含一个简单的签名应该很容易。例如,基于 JWT 令牌内容的哈希、商家帐户私有共享密钥以及由商家服务器生成的新随机序列,包含在初始 JWT 令牌中。此哈希只能由 Google 和商家计算,并且可以用于检查回发的真实性。

【问题讨论】:

    标签: security e-commerce android-pay


    【解决方案1】:

    JWT 包括您所指的散列 - 它是第三段。您需要使用您的seller secretverify the postback JWT

    iatexp 字段(分别在到期时发布)帮助您解决重播问题和您所指的“随机序列”(虽然不是真正的“随机”)到...

    第……

    【讨论】:

    • 哈,这很有道理。虽然文档不清楚,但在 Wallet 文档中没有说明如何正确解码和检查 JWT(使用 jsontoken java 库)。
    • @Laurent 它在 JWT 规范中(上面链接)...您还会发现 samples 应该会有所帮助...
    • 这很有趣,在 Google 的 java 示例中,他们不检查接收到的 JWT 签名是否正确 :)
    猜你喜欢
    • 2013-05-18
    • 2013-11-30
    • 2014-10-21
    • 2015-04-23
    • 2013-10-29
    • 1970-01-01
    • 2014-05-05
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多