无效的短期购买代币

时间:2014-09-16 08:14:31

标签: android in-app-purchase google-play in-app-billing

我有Android应用程序订阅应用内购买。因为我使用订阅从在线服务提供数据,我通过google play API使用服务器端的购买验证(购买后使用购买令牌发送给我)。我的数据库中的大多数购买代币都是长字母数字字符串,如下所示:

djcbhbiertdkkotyuupnlmioppb.AO-J1Ozg0oasdfB3MAlWy-PihFE_nPVRMMfTW2_VPJt5KTKQA3CXNwyqweJAtUdIGTuOW9zEIIy-XS_4Un-a-Co6aEs__Adj1rZ4GtRxPKr04ph-l6nP2sU-w6e500YfTj5l0O8WEXF37yt

这些都经过验证确定无误。但我不时会收到只包含15位数字的购买代币,如下所示:

781871156762279

对于这些结果总是如此:

Google.GoogleApiException Google.Apis.Requests.RequestError
The purchase token was not found. [404]
Errors [
    Message[The purchase token was not found.] Location[token - parameter] Reason[purchaseTokenNotFound] Domain[global]
]

我在文档中没有找到任何相关内容。我错过了什么吗?或者可能是这些是我的应用程序的某些破解版本的“假”购买?感谢。

1 个答案:

答案 0 :(得分:1)

我收到了相同的15位数格式的短期购买代币,而且我认为这些代币实际上都是欺诈性购买的尝试。

这不是你的应用程序被破解。相反,用户将特殊应用安装到根设备上,该设备对您的应用执行中间人攻击,模拟合法的应用内结算服务。当您的应用开始购买流程时,此欺诈性应用会拦截购买请求,并返回虚假购买代币。

在本地验证令牌的应用程序容易受到攻击,因为使用相同的欺诈性应用来验证令牌。

将令牌发送到后端的应用可能更安全,因为后端可以向in-app billing API发出请求以独立验证令牌。但是,应用必须等待后端验证成功,然后才会授予用户购买的权限。

有关此次攻击的更多详情,请参阅my other answer