【问题标题】:OAuth implicit flow security with PhoneGap使用 PhoneGap 的 OAuth 隐式流安全性
【发布时间】:2014-07-07 20:36:57
【问题描述】:

我正在使用 Bearer 令牌为我们的 Web API 2 RESTful API 实现授权服务器。为了提供一些上下文,我正在构建一个 MVC Web 应用程序以及一个 PhoneGap 移动应用程序(将部署到 iOS 和 Android),它们将使用 RESTful API。我已经对该主题进行了大量研究,并且了解我想为我的 MVC 应用程序使用 授权码 流程(因为客户端机密将被保密),但是,这是我的了解我必须为 PhoneGap 应用程序使用 implicit grant 流程,因为它是一个纯粹的客户端应用程序,因此假定它不能保存秘密。

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

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

谢谢!

【问题讨论】:

  • 因为我已经在一个网站上实现了这一点,所以我想做的是为手机创建一个特殊的页面来注册/登录,然后使用他们可以使用的会话令牌将它们重定向回来采用。进一步的身份验证请求通过 SSL 发送,令牌作为 HEAD 或 BODY 的一部分是我想要做的。如果我真的实现它(保持真实),我会更新它作为答案。

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


【解决方案1】:

Oauth2 隐式流通常是不安全的。就像你提到的,任何人都可以看到你的client_id,并且可以创建一个登录 URL 来欺骗用户,并且可以窃取access_token。这对于任何使用 Oauth2 隐式流的服务(包括大玩家)都是可能的。

垃圾邮件应用实际上是在 Instagram 上这样做的,它们使用别人的 client_id 允许登录,收集 access_token 并使用它在 Instagram 上发送垃圾邮件喜欢/评论。

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

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

【讨论】:

  • 嗯,这是个好主意。正如您所说,它仍然可以被黑客欺骗(使用与欺骗隐式授权相同的方法),但是我如何才能更多地控制/限制对我的电话间隙应用程序的访问?是否有办法检测请求来自 [来自 MVC 应用程序] 并拒绝它是否不是我的移动应用程序?这也不能被恶搞吗?
猜你喜欢
  • 2019-07-26
  • 2012-12-27
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多