2011-02-01 65 views
4

如果我理解正确的话,从我的桌面应用程序调用API(姑且称之为从现在开始和“客户”作为了OAuth2标准上)我需要获得的access_token它是结合了应用程序ID和标识用户,谁是我想访问的数据,id('资源所有者')。使用redirect_uri的Facebook客户端身份验证流程是否为borken?

继认证指南(developers.facebook.com/docs/authentication/)我明白,我需要发送请求到h客户端流量** PS://www.facebook.com/dialog/oauth的client_id = YOUR_APP_ID & REDIRECT_URI = HTTP:// example.com & response_type = token。结果,该页面将被重定向到h ** p://example.com/#access_token=XXX。如果客户端是纯桌面应用程序,那么redirect_uri可以是h ** p://www.facebook.com/connect/login_success.html。由于客户端拥有Web控件,因此可以轻松地从重定向的地址提取access_token。

客户端侧流由3个OAuth的步骤:

  1. 用户认证,如果资源所有者没有在给Facebook,对话记录,要求对于Facebook凭证,将被显示。如果资源所有者已登录,则会话将使用Facebook服务器上的cookie进行身份验证。安全 - 检查V!
  2. 应用程序的授权,如果资源拥有者没有给应用程序的权限呢,权限对话框会要求从资源所有者授予权限的应用程序,如果资源拥有者之前磨碎所有需要的权限,权限对话框不会被显示。安全 - 检查V!
  3. 应用程序身份验证 - 现在,这里是粘滞的地方。该指南说:“通过验证redirect_uri与开发者应用程序中配置的站点URL位于相同的域中来处理应用程序身份验证”。安全 - 在我看来 - 失败

为什么我认为,最后一步是安全失败?首先,app id和redirect_uri都是公共信息,任何人都可以获得。其次,redirect_uri可以是h ** p://www.facebook.com/connect/login_success.html。

让我们看看下面的场景。桌面应用程序EVE向用户显示一个Web控件,用户登录Facebook并授予EVE一些基本权限。资源所有者没有理由怀疑任何事情。接着,EVE隐藏了网络控制,并试图在其上ħ** PS加载://www.facebook.com/dialog/oauth CLIENT_ID = OTHER_APP_ID & REDIRECT_URI = HTTP://www.facebook.com/ connect/login_success.html & response_type = token。该应用程序可以尝试使用最流行的Facebook应用程序ID加载此网址。如果用户以前授权OTHER_APP,该应用将获得成功消息,因为登录对话框和权限对话框将不会显示。这将使EVE获得一个access_token来访问资源所有者授予OTHER_APP而不是EVE的所有资源。

所以,这是一个安全漏洞?我错过了后续的东西吗?

(UPDATE)在一个桌面应用程序的情况下

显然,安全问题是无关紧要的,因为该应用程序已具有用户名和facebook的会话,甚至用户名和密码,就可以做任何事情用户帐户。

(更新) 对于在Web浏览器中运行的JavaScript应用程序,redirect_uri实际上可行! (请参阅hnrt的回答和评论)。

当前的问题: 唯一剩下的秘密就是客户端身份验证如何在iPhone和Android应用上运行?整个安全性与使用桌面应用程序时的安全性是否相似?越狱iPhone或固定的Android有什么不同?

干杯!

+0

至少在iPhone上,它看起来像每个令牌请求不同的app_id要求用户登录。什么阻止开发人员不使用SDK,但通过标准API请求access_token? – fudge 2011-02-06 12:17:00

回答

1

如果我理解正确,您的场景将要求用户已经使用EVE可用于与Facebook交谈的相同网络控件对其他应用程序进行身份验证。如果是这样的话,那么已经有很多更大的安全问题了:) EVE可能会劫持整个会话及其所有身份验证令牌。

[更新]关于Javascript应用,same origin policy阻止EVE访问/dialog/oauth?client_id=OTHER_APP请求的回复。访问数据的唯一方法是在redirect_uri处等待并解析重定向的请求。我不确定iPhone和Android应用程序如何工作,但如果他们的Web控件允许访问其他身份验证数据(= Cookie),我会非常惊讶。应用。

+0

您对桌面应用程序正确无误。用户名和密码也可能被应用程序劫持。我将我的问题更新为JS案例。 – fudge 2011-02-02 07:44:54

相关问题