【问题标题】:identifying which android app is making contact with my appengine app识别哪个 android 应用程序正在与我的 appengine 应用程序联系
【发布时间】:2012-12-21 14:52:09
【问题描述】:

这是一个“这可能吗?”题。我有一个适用于 android 手机的应用程序和另一个适用于 appengine 平台的应用程序。 appengine的东西真的只是一个高分的db,而手机应用程序真的只是一个游戏。我可以使用一些 json/gson/httppost 的东西,将分数从游戏发送到数据库。现在我想确保我收集的分数来自游戏,而不是某个人,可能有编程天赋但手头有太多时间。

问题来了。我可以使用 google OAuth 2.0 以某种方式验证我获得的分数来自运行我的游戏的手机吗?

我想我会这样做:我会使用 OAuth 从 google(从手机)获取某种令牌,然后将该令牌传递给 appengine 数据库(使用 json 记录),然后使用该令牌从谷歌获取用户信息。这可以像电子邮件地址一样简单。然后我会对自己说“好吧,只要我得到用户的电子邮件地址,我就知道用户正在使用游戏,我可以存储他们的分数。”这听起来可能吗?我感觉一旦我用手机从 google 获取令牌,appengine 程序就无法使用它了。

我在想我会使用与 appengine db 相关联的 client_id 和 client_secret(以及我需要的任何其他内容)从手机中获取令牌,然后当我通过 json 将令牌发送到附加程序时获取电子邮件地址,他们将从 appengine 工作。这似乎谷歌 OAuth 会以某种方式知道我试图从手机获取令牌,然后会拒绝整个事情。再说一次,也许它会起作用。他们说虽然安卓手机不能保密(指的是client_secret)。

最后我想知道是否有任何其他更简单的方法来确保我在 appengine 端记录的分数真的来自运行我的游戏的安卓手机?我可以设置自己的身份验证方案吗?这有多难?

【问题讨论】:

  • 手机本身有一个 id,为什么不使用它来跟踪玩家(但如果每部手机有多个玩家,可能会变得很棘手) Settings.System.ANDROID_ID

标签: android google-app-engine oauth-2.0


【解决方案1】:

好时机;谷歌刚刚发布的一项功能将解决您的问题: http://android-developers.blogspot.ca/2013/01/verifying-back-end-calls-from-android.html

这是一个多步骤的过程,我将对其进行完整概述,但是 这是简短版本:您使用 GoogleAuthUtil 类,可用 通过 Google Play 服务,检索一个名为“ID”的字符串 令牌”。您将令牌发送到后端,您的后端可以使用 它可以快速而廉价地验证哪个应用程序发送了它以及谁在使用它 应用程序。

【讨论】:

  • 我还没有尝试过,但看起来很有希望。
  • 这本质上是使用(位)Open ID 连接来实现相同的目的。用户身份验证非常可靠,但欺骗源应用程序并不难。如果您要为每个用户存储分数等,它应该适合您。
  • @NikolayElenkov,如果您使用这种方法,您将如何欺骗源应用程序?
  • 从任何根设备获取有效的 Google 主令牌,从您要欺骗的应用程序中提取客户端 ID,构建并发送适当的请求。唯一可以验证的是 Google 帐户(有效)和客户端 ID(匹配,因为您是从应用程序获得的)。签名证书的包名哈希是任何应用程序的公共信息。
【解决方案2】:

使用 OAuth 2.0(Open ID 连接),您可以识别正在使用您的游戏的用户。不过,您似乎想对 app 进行身份验证。有多种方法可以做到这一点,但您仍然必须在应用程序中嵌入凭据或创建某种注册机制。一般来说,只要你的攻击者(熟练的用户)拥有对应用程序代码和设备(root 等)的完全访问权限,你就无能为力了。唯一的问题是你想让谁努力。

或者您可以使用第三方服务,例如Parse,并相信他们会花一些时间完善其应用身份验证机制。

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多