Rob*_*ler 6 ssl mobile android oauth xauth
我花了最近几天才开始运行OAuth.不是在Android上,而是在我的网络服务器上,它将充当OAuth保护服务的代理.我正准备实施我的Android客户端,我的头脑仍然在讨论安全性和实施问题.
当客户端只是一个Web浏览器时,OAuth就足够混乱了.您有以下一系列步骤:
现在这已经足够了.但是当使用与移动应用程序相同的机制作为客户端时,它会更加复杂.问题当然是你必须做一些杂技,以便在进行OAuth舞蹈时将浏览器会话注入到移动应用程序的代码流中.这意味着你必须进一步复杂化OAuth舞蹈如下(我在这个例子中使用Android应用程序来使事情具体化):
你可以看到这很可怕.如果有一个更简单的方法,那么我渴望听到它.据我所知,只有两个其他选择,每个都有自己的重大问题.
1)忘记代理服务器并直接从移动Web应用程序执行所有操作.这里最大的安全漏洞就是你必须在你的OAuth消费者密钥中"烘焙"并秘密进入你的应用程序.如果攻击者对您的代码进行反编译并搜索这些字符串,对于具有逆向工程经验的人来说,这是一个相当简单的操作,它们会对您的应用程序和用户造成严重破坏.
2)切换到XAuth,用户在那里向您提供他们的登录名和密码,并且您"同意"不存储它们并直接与XAuth服务器交换访问令牌.第一个问题是获得用户信任以提供该信息,创建OAuth以解决问题,当然还有那些不履行其放弃登录详细信息的承诺的人呢?更糟糕的是,XAuth服务器必须支持XAuth并提供HTTPS(SSL)连接,而且我已经看到大量不支持的Web API.当然,SSL连接是必要的,因为在没有它的情况下,您在发出XAuth请求时会以纯文本形式通过网络发送用户的登录名和密码.
http://blog.zyber17.com/post/1283741364/why-xauth-is-a-really-dumb-idea
仅供参考,虽然它不使用代理服务器,但以下示例说明了我将上述用于将浏览器会话注入您的移动应用OAuth交互并拦截回调URI的技术:
http://blog.doityourselfandroid.com/2010/11/10/oauth-flow-in-android-app/
所以你看它看起来很丑陋,我甚至没有为用户创建和管理你自己的用户ID而烦恼,这样你就可以正确查找存储在代理Web服务器上的访问权限(包括一个PIN或访问代码的混乱,供用户管理).
有趣的注意事项:在对Android网络浏览器会话安全性进行一些研究时,我很高兴地发现您不能访问当前的网页HTML.如果您可以访问它,那么恶意的Android编码器可以轻松地嗅出用户的登录名和密码,从而完全破坏OAuth的目的和意图.我很沮丧地发现可能有办法通过CacheManager对象获取HTML.奇怪的是,该对象现在已被弃用,并根据Android文档计划删除,因此希望这意味着Google发现了(潜在的)安全漏洞并正在采取措施在即将发布的版本中将其删除:
http://developer.android.com/reference/android/webkit/CacheManager.html
最后,我想听听那些在创建OAuth应用程序时遇到这些相同问题的人的想法.
- roschler
Janrain 发布了一个库,它提供了一些 UI 粘合和代理后端登录系统;它支持许多流行的 OAuth 身份提供商(例如 Google/FB)。在登录流程结束时,您会从设备获得 HTTPS POST,为您提供可交换用户标识符和其他信息的令牌,以及将访问令牌返回到设备的通道。
http://www.janrain.com/products/engage/mobile
https://github.com/janrain/engage.android
披露:我在 Janrain 的这个图书馆工作。
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |