我想从iphone应用程序向我建立的Web服务发出请求。如何验证对Web服务的请求来自我的iphone应用程序(或任何授权来源)并且不是伪造的?
我已经通过HTTPS查看了基本身份验证,但是将凭据烘焙到应用程序安全吗?
这个问题并不是特定于iphone的;我想知道如何保护和验证一般的请求。
答案 0 :(得分:2)
可以通过呈现您知道的内容,您拥有的内容,您拥有的内容或三者的组合来声明身份验证。
iPhone没有视网膜或指纹扫描仪,因此没有“你有什么”的选择。
客户端证书可以作为“您拥有的东西”令牌。大多数智能卡通过使用嵌入式证书签署消息来工作。当证书被泄露时,可以将其放入Web服务器引用的证书吊销列表(CRL)中。显然,您不希望将应用程序的嵌入式证书放在CRL中 - 这会拒绝所有用户访问。相反,您会希望用户将个人证书下载到他们的iPhone。
在此之后,需要监视异常行为以找到不良行为者并将这些证书添加到CRL中。两个死亡的赠品将是客户一次发送太多请求或者在太短的时间内发送太多不同的IP。
登录/密码是一个简单的“你知道的”令牌。与证书一样,登录/密码组合可能会受到损害,并且可以设置类似的监控以查找不当行为。差异是受损的帐户将被标记为“阻止”而不是添加到CRL。
通过同时要求客户端证书和登录/密码,您可以增加危害帐户所需的工作量。
当然,您必须确保只将有效帐户添加到数据库中。如果存在创建新帐户和相应客户端证书的自动方式,那么该帐户创建服务器/进程将成为不良参与者创建可行的未授权帐户的最简单方法。要求真人签署帐户会删除自动化流程,但意味着心怀不满或腐败的员工可能会创建无效帐户。要求第二个人对帐户进行反签名会使单个人更难成为内部威胁。
简而言之,确保客户的高度完整性是一个可以任意复杂和昂贵的过程。您决定部署哪些工具和流程作为身份验证方案必须通过其保护的值来平衡。
答案 1 :(得分:1)
理论上,如果您希望连接安全,最好让客户使用证书签署他们的请求。关于此,有多种资源。在Google上查找“客户端证书”。
This example from Sun在Java中,但无论语言如何,概念都是相似的。
PS:显然,这并不妨碍您使用其他身份验证方法,如密码等......
PPS:请记住,如果有人设法从您的应用程序中提取证书,那么无论如何都会被搞砸;-)。您可以想象一个商店为每个应用程序提供单独的证书,并使受到损害的证书无效。