iPhone应用程序端验证
我正在开发基于与服务器通信的iPhone应用程序,并且我想使用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