iphone - iPhone 应用程序的 Facebook 访问 token 服务器端验证

标签 iphone facebook authentication

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

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

  1. 在我的 iPhone 应用程序中,用户使用他的电子邮件和密码登录 Facebook。
  2. 用户允许访问其相关 Facebook 应用程序的数据。
  3. 我的 iPhone 应用程序在成功登录后收到访问 token 。
  4. 在与我的服务器的进一步通信中,我的 iPhone 应用程序应该使用接收到的 Facebook 访问 token (例如:在查询中)。
  5. 当我的服务器从 iPhone 应用程序接收到一些带有访问 token 的查询时,它应该向 Facebook 询问此 token 是否有效(以及对谁有效),如果是,服务器应该假定用户已通过 Facebook 的身份验证。

我的问题是:如果给定的访问 token 有效,服务器应该如何询问 Facebook?我想我应该以某种方式检查 token 是否对我的 Facebook 应用程序有效。

我已经尝试了很多 Facebook 查询来绘制 API,我已经找到了,但是没有一个像我预期的那样工作。你能给我举个例子吗?

最佳答案

您可以使用以下两步流程来验证用户访问 token 是否属于您的应用:

1) 生成应用访问 token

( 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) 调试用户访问 token

( 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 是您要验证的用户访问 token ,ACCESS_TOKEN 是您从第 1 步获得的应用 token 。

调试端点基本上会转储有关 token 的所有信息,因此它会像这样响应:

{
    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: [ ]
    }
}

如果该 token 不是来自“您的应用”,那么它将返回错误响应。

关于iphone - iPhone 应用程序的 Facebook 访问 token 服务器端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5406859/

相关文章:

asp.net-core - 使用 Google 登录,仅允许组织域帐户

ios - 帖子未按顺序显示

iphone - 旋转后UIView图层阴影变暗

iphone - UITableview 混淆单元格

Facebook GraphQL 对象喜欢端点返回 "Tried accessing nonexisting field (likes) on node type (Post)"

javascript - 如何仅在第一个函数完全完成后才运行第二个 Javascript 函数?

android - 使用facebook sdk jar时java.lang.NoClassDefFoundError : com. facebook.android.R$布局错误

authentication - TLS Channel ID 如何保证客户端的真实性?

javascript - 如何在iPhone上使用windowScriptObject?

javascript - 在登录表单中显示保存的密码