【问题标题】:Mobile APP - API Authentication concept [closed]移动应用程序 - API 身份验证概念 [关闭]
【发布时间】:2017-03-08 14:07:14
【问题描述】:

我有一个概念性问题,想知道是否有人愿意提供帮助。

我会用一个简单的例子来说明我的观点。

我开发了一个简单的 RESTFul API,以 Node.JS + Express + MongoDB 作为后端。该 API 保存来自 Android 游戏应用程序的高分。我使用基于令牌的身份验证,其中令牌是从秘密和受信任的用户名/密码(硬编码或非硬编码)生成的。

但我对安全性仍有疑问......

逆向工程是小菜一碟,因为任何开发人员都可以轻松找到 API 的后端端点,并使用其用户名和密码(或硬编码)来获取令牌。

然后令牌可用于通过 API 插入虚假高分。

我的问题是:

  • 有什么方法可以避免这个安全漏洞吗?
  • 使用 RESTFull API 是否是将移动应用程序与服务器中的后端连接的正确方法?
  • 如果不是,那么开发 APP-Server 通信以将数据保存在后端 DB 中的正确方法是什么?

我想我可以使用包含硬编码用户名和密码的代码,但这并不能解决问题。

PD:用户说我的问题太宽泛了。我提出了 3 个具体问题,主题是关于避免应用程序信息的可见性以连接到 API。我知道有太多的答案,但我不想要一个解决方案,只是一个调查的方法。

【问题讨论】:

  • 你可以为你的第一个问题做proguard。对于你的第二个问题,答案是肯定的。应该实现 Rest API。
  • 好的,谢谢。然后通过加密秘密对象和方法来让别人难以调试是最好的解决方案。谢谢
  • 只是不允许知名 API 用户访问更新统计信息。或者禁止基于令牌的身份验证,只允许它使用您的应用程序。您也可以使用范围。
  • 帕特里克,我不理解你。我想允许使用该应用程序,但如果用户反编译该应用程序,他可以找到端点和用于获取令牌的数据,不是吗?

标签: android node.js api security backend


【解决方案1】:

没有完全可靠的方法可以做到这一点。理论上,一切都可以调试 - 包括您的验证机制(令牌生成)。

使用网络 API 是让您的移动应用与后端通信的好方法,并且在大多数情况下都能正常工作。但是,在您的情况下,您基本上希望确保 API 仅通过您拥有的 Android 应用程序使用。这通常是通过加密通信协议并使其他人难以调试来完成的。因此,您的应用程序将以某种方式加密通信,如果您不了解应用程序/服务器的内部结构,则很难解密。但是,这很难从头开始。

如果你想要一个现成的解决方案,你可以使用谷歌的Play Game Services,获取高分、成就等。这应该足够安全,但我不能说这对你目前的情况有什么影响。

【讨论】:

  • 非常感谢。高分示例是为了让它简单易懂,但应用程序更复杂。然后我将使用代码以使其更难调试。
  • @WikiCode 请记住,主要游戏开发商(如暴雪和 Pokemon Go)也有完全相同的问题。如果你想做对,这不是一件小事。
  • 我知道,在这个意义上我们必须要有创意
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 2021-12-26
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2014-03-02
  • 2014-02-25
相关资源
最近更新 更多