使用Framework API令牌验证来自iPhone的请求

时间:2013-07-30 22:40:16

标签: ios authentication mobile

所以我正在创建一个iOS框架,它将是一个开发人员将添加到他们项目中的静态库,当他们在我们的网站上创建一个帐户时,我想给他们一个他们放入应用程序的唯一标记使用我的静态库。

对于iOS开发者,请考虑TestFlight,您注册,获取应用ID,然后运行[TestFlight takeOff:<#some-key#>];

我想验证框架对我的REST Web服务的请求(使用https)。

我能做些什么来防止人们“侵入应用程序代码”并窃取开发人员api令牌并使用它来发出请求?我的api端点不会是公开信息,至少现在是这样。我无法验证用户,因为它是一个框架,这将是一个可怕的用户体验。

问题是,我能做些什么来阻止这种行为吗?我应该关心吗?我最终将根据X请求向开发人员收取费用,因此我希望对此进行身份验证,以便我们不会让垃圾邮件发送者为开发人员支付账单。

其他iOS框架如何处理这个问题?

任何设计理念和批评欢迎。

1 个答案:

答案 0 :(得分:1)

我不确定你想做什么是可能的。如果文本在客户端代码中,则可以将其拉出。 SSL-pinning在这里也不会真正帮助你,因为证书也在客户端二进制文件中。

您可能能够接近的一种方法是使用开发人员的身份验证系统。假设用户登录到开发人员的auth系统,然后服务器端为该用户生成一个短期密钥。然后客户端代码可以传递(通过SSL-pinning)短期密钥,并使用它来进行API调用。但是,这需要开发人员实际拥有一个安全的身份验证系统,并且没有SSL固定,他们很容易受到简单的中间人攻击,这会触发短暂的密钥。

您可以尝试通过限制API调用来最小化损害,或尝试使用每个应用启发式来估算正常的API使用情况。任何超出常规的东西都会被标记为潜在的黑客。这可能足以冲掉大多数想成为黑客的人。真正的黑客将学习节流并且聪明地规避它......

最安全的做法是将其设为服务器端库而不是客户端库。然而,这当然也不是一个超级性感的解决方案。并非所有的应用程序都有服务器端组件......即使他们这样做,一旦开发人员的服务器遭到入侵(即被垃圾邮件或被黑客入侵等),它就会重新开始游戏。但是,最后,服务器端解决方案的优点在于,您至少不易受到攻击,并且您负责将系统保护在开发人员身上。

这里真正缺少的是某种形式的基于Apple的网络电话验证来源于Apple设备....但这可能永远不会发生。 :)