iPhone应用程序端验证

我正在开发基于与服务器通信的iPhone应用程序,并且我想使用Facebook身份验证机制。

基本上,我认为它应该像这样工作:

  • 在我的iPhone应用程序中,用户使用他的电子邮件和密码登录Facebook。
  • 用户允许访问他的相关Facebook应用程序的数据。
  • 我的iPhone应用程序在成功登录后收到访问令牌。
  • 在与我的服务器的进一步通信中,我的iPhone应用程序应该使用接收到的Facebook访问令牌(例如:在查询中)。
  • 当我的服务器收到来自iPhone应用程序的一些查询,并使用访问令牌时,它应该询问Facebook此令牌是否有效(以及谁),如果是,服务器应该假定用户使用Facebook进行了验证。
  • 我的问题是:如果给定访问令牌有效,服务器应该如何询问Facebook? 我想我应该以某种方式检查令牌是否对我的Facebook应用有效。

    我已经尝试了许多Facebook查询来绘制API图表,但我没有发现,但没有像我期望的那样工作。 你能提供一些例子吗?


    更新: 此答案似乎不安全,因为它不首先验证令牌属于您的应用程序,请参阅注释,原始答案如下:

    我假设你已经拥有访问令牌。 在这种情况下,验证访问令牌的最简单方法是发出以下请求

    https://graph.facebook.com/me?fields=id&access_token=@accesstoken
    

    这里用@accesstoken替换你有的访问令牌。 我会打破网址,并会解释每一个。

    我们在这里发出一个图API请求,它将把访问令牌所有者的Facebook用户ID作为JSON字符串返回。 关键字'me'代表当前登录的用户或访问令牌的所有者。 对于此请求,访问令牌是一个必需参数。

    如果提供的访问令牌无效或过期,Facebook将仅返回某种错误消息。

    对于有效的访问令牌,结果将以某种方式看起来像这样

    {
       "id": "ID_VALUE"
    }
    

    以下是您可以用来验证用户访问令牌属于您的应用程序的两个步骤过程:

    1)生成App Access令牌

    (https://developers.facebook.com/docs/howtos/login/login-as-app/)

    https://graph.facebook.com/oauth/access_token?
    client_id=YOUR_APP_ID
    &client_secret=YOUR_APP_SECRET
    &grant_type=client_credentials
    

    2)调试用户访问令牌

    (https://developers.facebook.com/docs/howtos/login/debugging-access-tokens/)

    https://graph.facebook.com/debug_token?
    input_token=INPUT_TOKEN
    &access_token=ACCESS_TOKEN
    

    其中INPUT_TOKEN是您要验证的用户访问令牌,ACCESS_TOKEN是您从第1步获得的应用令牌。

    调试端点基本上转储了关于令牌的所有信息,因此它会以如下方式响应:

    {
        data: {
            app_id: YOUR_APP_ID,
            is_valid: true,
            metadata: {
                sso: "iphone-safari"
            },
            application: YOUR_APP_NAMESPACE,
            user_id: USER_ID,
            issued_at: 1366236791,
            expires_at: 1371420791,
            scopes: [ ]
        }
    }
    

    如果该标记不是来自“你的应用程序”,那么它将返回错误响应。


    另一种解决方案是使用https://graph.facebook.com/app/?access_token=[user_access_token] ,如通过从用户访问令牌获取应用程序ID(或验证源应用程序的令牌)所述。

    这似乎是一个未记录的功能,但返回包含为其生成标记的应用的ID的JSON。 如果令牌不适合您的应用,则返回400。

    链接地址: http://www.djcxy.com/p/54103.html

    上一篇: side validation for iPhone app

    下一篇: Where should my caching daemon live?