如何为移动应用程序设计安全API /身份验证以访问服务?

cod*_*711 9 security iphone api android oauth

我想提供我的webapp的一些功能用于其他应用程序(我主要考虑智能手机,因为它们提供更多功能,例如GPS,相机,......).

从目前为止我在其他API(例如GoogleMaps)方面遇到的情况来看,第三方开发人员会在我的网站上注册自己,他获得了一个API密钥(一些随机的UUID),他必须用它来验证他的请求.我的网站.到现在为止还挺好...

是否有机制保护移动应用程序的最终用户免受恶意应用程序的攻击?例如,第三方开发人员可以构建应用程序并从最终用户捕获所有用户名/密码,以便他可以使用useraccount做坏事.(例如,我可以构建一个Twitter应用程序,捕获所有用户名/密码,然后删除所有的推文,发布新的,...)是否有可能阻止这种情况?AFAIK你可以在网上使用oauth,这样我的网站登录框就会出现在另一个网站上并询问他们的用户名/密码,这样它就不会显示给第三方网站了.是否可以为智能手机应用程序实施安全身份验证?你会怎么做?

lub*_*ben 7

对于Android和iPhone,您可以毫无问题地使用OAuth,到目前为止,我认为这是最好的方法.

这两种智能手机类型的流程与Web应用程序相同,因为两种操作系统都可以让您从应用程序启动Web浏览器并将用户重定向到Web提供程序,这样他就可以授权您的请求(令牌),然后浏览器可以通过适当的回调URI将您的用户返回给应用程序.我还没有为手机实现oauth,但我从朋友那里听说,移动浏览器可以通过一些特殊的URI将用户重定向回你的应用程序,例如scheme://app/parameters.

以下是android:link的内容

有两个oauth用例:2腿和3腿

2-legged是您希望保护API的时候,因此只能从经过身份验证的消费者应用程序中调用它.这是一种流行的方案,存在于AFAIK年代 - 消费者使用消费者共享密钥签署每个请求,而提供者(您的API)也签署请求以查看签名是否匹配.通过这种方式,您可以判断该使用者的API使用情况是否正常.

3-legged oauth包括消费者第三方应用程序的最终用户.它非常适合,如果您想像两条腿一样再次保护您的API,因为请求仍然是签名的,但您的API也可以受最终用户的许可保护.API的提供者发布令牌并将其提供给消费者应用程序(第三方应用程序).然后,此应用程序在本地保存令牌,并将用户重定向到Provider以授权令牌.当用户授权它时,提供者将用户发送回消费者应用程序,然后消费者可以对您的API进行经过身份验证(签名)和授权(由用户 - 第三方)的请求.

一旦你阅读它的工作方式,协议就不是很复杂,并且非常灵活 - 你可以根据自己的需要扩展它.我强烈建议它用于保护API,尤其是在访问API时需要用户权限的情况下.

这是一个关于oauth的非常好的网站:http://hueniverse.com/oauth/

- - 添加在 - -

消费者应用程序中的共享密钥存储存在一些安全隐患 - 在您的情况下是移动电话应用程序.

如果有人打开你的程序并反汇编代码并提取共享密钥,那么他就可以创建应用程序,它将成功地向提供者API进行身份验证.但是,如果需要用户授权(3条腿),这不是一个非常大的问题,因为仍然会要求用户授予此错误应用程序的权限 - 现在由用户做出正确的选择.除此之外 - 虚假应用程序将无法窃取用户的凭据,因为使用oauth,用户凭据仅在提供商的站点上输入.