【问题标题】:How a mobile app can authenticate itself to a server?移动应用程序如何向服务器验证自己的身份?
【发布时间】:2015-06-03 15:41:58
【问题描述】:

我们有一个带有服务和客户端移动应用程序(Android、iOS)的服务器。用户使用用户名/密码进行身份验证,但应用程序本身呢?我想限制对服务器的访问仅限于我的应用程序,我不想让用户参与其中,我想让它与用户登录过程分开。

第一个想法是在应用程序中保留某种密钥、密码、证书等(并使用它来加密来自服务器的随机挑战),但由于它是硬编码的,因此可以从代码中取出并由其他应用程序使用。

如果手机有一些安全存储来保存证书,访问它的密码将保存在应用程序中,以便再次被挖掘出来。

【问题讨论】:

  • 您能解释一下为什么需要这种级别的安全性吗?如果你告诉我们,你必须杀了我们吗?
  • 选择类似于 OAuth / OAuth 2 的东西。如果它对 Google、Facebook、Twitter、DropBox 和其他许多公司来说足够好,那么对你来说应该足够好了吧?
  • 我认为它的安全性并不高,我们只是不希望我们(或客户)的服务器被未经授权的应用程序访问。顺便说一句,我在信用卡交易协议和标准方面有一些背景,也许这让我问得太多了:)
  • 如果我说谷歌、FB 等对第三方应用程序开放 API,由其他公司制作和发布,我说得对吗?这不是我们的情况

标签: web-services security authentication certificate mobile-application


【解决方案1】:

您可以拥有一个包含“受信任”应用设备的数据库,并将其链接到您的用户或设备数据库(也就是谁在使用谁)。您可以尝试一次性密码方法(在后台使用应用程序代码)并在用户每次与应用程序交互时进行身份验证。

我也同意可以获取设备中的所有内容(硬编码/存储),因此基于时间的解决方案可以有效地减少尝试进行未经授权的操作。

【讨论】:

  • 它看起来像“设备身份验证”,而不是“应用程序身份验证”:) 即使使用相同的密钥和相同的挑战(并且没有理由一直是相同的挑战)添加“盐”并且使用链接将始终创建不同的答案。我可以击败任何聆听交流的人。但是知道如何并有时间的人可以从 apk 或运行时获取密钥
猜你喜欢
  • 2012-10-24
  • 2016-11-23
  • 2012-11-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2019-08-31
相关资源
最近更新 更多