如何验证使用Facebook验证用户的Web服务调用?

时间:2011-10-30 05:56:09

标签: iphone web-services authentication rest facebook

我正在开发一个iOS应用程序,使用Facebook身份验证让用户登录应用程序,然后该应用程序与Python REST Web服务进行交互。

用户使用Facebook凭据登录应用后,我应该使用哪种策略来验证网络服务电话?

6 个答案:

答案 0 :(得分:6)

将身份验证令牌发送到您的REST Web服务,并让REST Web服务使用fb(facebook)进行检查。

  1. 用户登录应用后,您将获得身份验证令牌。

  2. 将令牌和fb用户ID发送给您的REST Web服务。

  3. 您的网络服务应验证令牌是否有效(这涉及对fb的服务器 - 服务器API调用)。

    我使用了php和这段代码,但python应该看起来一样。

    function checkFacebookLogin($acces_token) {
        $url = "https://graph.facebook.com/me?access_token=" . strip_tags($acces_token);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        $response = curl_exec($ch);
        curl_close($ch);
        $user = json_decode($response);
        return $user;
    }
    
  4. 如果它有效,则会返回用户。

  5. 验证用户ID(来自fb和步骤2中的帖子)。如果它是相同的,那么您就拥有了经过身份验证的用户。

  6. 将身份验证令牌和时间戳存储在您服务器上的本地数据库中,这样您就不必再通过ander打电话给facebook了。当用户重新登录时,您可以检查身份验证令牌和时间(仅有效x小时)并授予权限,而无需使用Facebook检查令牌。请注意,用户可以在此期间撤销fb权限。

  7. 祝你好运。

    评论问题的更新:

    当然,请查看Google的开发者文档中的validating the token。它是为(javascript like)客户端应用程序编写的,但这并不重要。你可以用php或python调用url。

    最后你会打电话给:

    https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=##ADD_TOKEN_HERE##
    

    您还可以阅读Google提供的关于从已安装的应用中使用Google登录并使用Google从网络服务器进行控制的2个文档。

    https://developers.google.com/accounts/docs/OAuth2InstalledApp https://developers.google.com/accounts/docs/OAuth2WebServer

答案 1 :(得分:3)

我将采取的工作流程:

  1. 使用facebook验证用户
  2. 从Facebook
  3. 中检索访问令牌
  4. 将facebook身份验证令牌传回Web服务
  5. 通过访问令牌获取Facebook用户信息,即facebook userId,email等
  6. 使用本地用户db验证用户详细信息
  7. 如果用户从服务器端存在日志用户(或将用户视为登录用户)
  8. 如果是新用户注册用户并登录用户
  9. 做休息......
  10. 基本上它是一种非常类似于facebook API的方法。您将始终在网址末尾添加一个accessstoken padding(查询字符串)。 关于这一点的好处是,您不再需要担心访问令牌到期。

答案 2 :(得分:1)

验证用户

以下是有关如何使用Facebook SDK平台上的iOS对用户进行身份验证的官方Facebook文档:https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/authenticate/

以下是GitHub上Facebook官方xcode示例的链接,该示例允许您使用FBSession对象https://github.com/facebook/facebook-ios-sdk/tree/master/samples/SessionLoginSample对用户进行身份验证。此代码适用于iPhone OS 4.0 or later

要开始使用此代码示例,您需要通过following six steps开始使用Facebook SDK

  

通过拖动来添加适用于iOS Framework的Facebook SDK   {SDK}安装文件夹中的FacebookSDK.framework文件夹   Frameworks的{​​{1}}部分。

     

通过拖动来添加适用于iOS资源包的Facebook SDK   来自Project Navigator的文件   FacebookSDKResources.bundle部分的FacebookSDK.framework/Resources部分   你的Frameworks

     

接下来,您需要将Project Navigator SQL库添加到列表中   在“构建设置”窗格中构建依赖项

  • 在以下位置添加''-lsqlite3.0''
  

您需要将Facebook应用ID放在您的两个位置   应用程序的主app ID文件。创建一个名为.plist的密钥   使用字符串值,并在那里添加应用程序ID。

     

此外,使用单个数组创建一个名为URL类型的数组键   子项称为URL Schemes。将此FacebookAppID前缀为fb。

的项目

six detailed steps你会在这里找到:https://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/3.1/

检索用户数据

用户通过身份验证后,即app ID开启activeSession后,您需要使用Facebook SDK FBSession对象将用户的信息作为{{1}获取您可以发送到Python REST Web服务的对象。这方面的官方教程如下:https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/personalize/,相关代码示例FBRequest位于此处:https://github.com/facebook/facebook-ios-sdk/tree/master/samples/ProfilePictureSample

FBGraphUser对象只能返回limited set of data,即:

  • 标题 - 个人资料名称
  • 描述 - 配置文件对象的描述
  • 图像 - 图像数组
  • 网址 - 个人资料的开放图表网址
  • 名字 - 个人资料的名字
  • 姓氏 - 个人资料的姓氏
  • 用户名 - 个人资料的用户名(如果适用)
  • 性别 - 男性或女性
  • 个人资料ID - Facebook用户ID

Open Graph对象数据的完整列表位于:https://developers.facebook.com/docs/technical-guides/opengraph/built-in-objects/#external_profile

如有任何问题,请随时留下一些意见。

答案 3 :(得分:0)

您仍然需要为REST服务提供单独的身份验证解决方案,只要您允许人们对您自己的数据执行CUD(创建,更新,删除),而不仅仅是R(读取)。

说到这一点,为了符合标准或更多趋势,oAuth 1.0(Twitter)或2.0(Facebook)是最好的选择。 oAuth 1.0有点复杂,但oAuth 2.0需要SSL。亚马逊AWS有自己的解决身份验证问题的方法,你可以稍微研究一下,看看这是不是你想要的。但一般而言,如果您的REST服务旨在供第三方开发人员使用,那么最好采用该标准。

答案 4 :(得分:0)

oAuth2.0是oAuth的Facebook友好版本,是你最好的选择。 Facebook的 Graph API 仅对其提供支持,因此,比使用其他一些解决方案更容易和/或更安全。 oAuth2.0与Facebook基础图谱API的合并状态让我建议oAuth2.0是你最好的选择。

答案 5 :(得分:0)

您需要使用Facebook oAuth工具api。

首先,您需要注册Facebook才能使用oauth。 Facebook将为您提供令牌(基本的唯一字符串ID)。

使用这些令牌,您将调用Facebook的登录服务。

成功尝试后,您将获得一些用户数据和回调,以将控件重定向到您的应用程序。

例如,您可以参考基于oauth的Twitter服务示例。 http://shakthydoss.com/open-authentication-oauth-with-twitter/