使用PhoneGap的OAuth隐式流安全性

时间:2014-05-19 19:02:54

标签: cordova oauth asp.net-web-api oauth-2.0 authorization

我正在使用Bearer令牌为我们的Web API 2 RESTful API实现授权服务器。为了给出一些上下文,我正在构建一个MVC Web应用程序以及将使用RESTful API的PhoneGap移动应用程序(将部署到iOS和Android)。我已经对这个主题进行了大量的研究,并且理解我想为我的MVC应用程序使用授权代码流程(因为客户端密钥将保持安全),但是,它我的理解是我必须为PhoneGap应用程序使用隐式授权流,因为它是一个纯粹的客户端应用程序,它被认为不能保密。

话虽如此,我仍然在为我对隐含拨款流的安全影响的理解而斗争。在浏览器中执行时,我理解它是有点安全(通过验证重定向uri,短期令牌等)。但是,因为PhoneGap将在其自己的浏览器实例中执行(因此通过我需要解析的哈希片段返回令牌),这如何将API锁定到我的PhoneGap客户端?

阻止恶意黑客简单地窃取client_id(嵌入在HTML / JS中)并构建自己的PhoneGap应用程序(或任何其他)并简单地通过隐式授权/身份验证过程,从而欺骗"批准"或"官方" PhoneGap应用程序?这个问题似乎并不特定于我的API - 这是否意味着这个问题存在于实现隐式流程的所有API(包括大型参与者,例如Facebook,Twitter等)?如何防止这种情况发生,这是否意味着我必须拒绝/不实施隐式流程?如果是这样,我如何从我的PhoneGap应用程序中安全地使用API​​

谢谢!

1 个答案:

答案 0 :(得分:2)

Oauth2隐含流量一般不安全。就像你提到的那样,任何人都可以看到你的client_id,并且可以创建一个欺骗用户的登录URL,并可以窃取access_token。任何使用Oauth2隐式流程的服务(包括大玩家)都可以实现这一点。

垃圾邮件应用程序实际上是通过Instagram执行此操作,他们使用其他人client_id来允许登录,收集access_token并在Instagram上使用垃圾邮件/评论。

Oauth2授权代码授权流程是possible在Phonegap应用程序中实现,但不建议这样做,因为您必须在HTML / JS中存储client_secret。与隐式授权流程相同,可以在Phonegap中使用,但人们可以获取您的client_id和欺骗用户。

你可以在Phonegap应用程序中使其更加安全的一种方法是使用Oauth2授权代码授权流,在从code重定向后,POST将其传递到您的服务器并使用哈希值验证,您的服务器可以使用POST对服务API执行实际的Oauth2 client_secret以获取access_token。所以在这种情况下client_secret不在应用程序HTML / JS中,而是在您的服务器上。 (这也可能被黑客欺骗,但你有更多的控制权)