是否可以使用Android应用程序从Facebook检索到的身份验证令牌在服务器端验证用户? 换句话说,Android应用程序使用SSO并获取身份验证令牌。然后将此令牌发送到部署在Google App Engine上的后端应用程序。然后后端应用程序使用令牌验证用户对Facebook。
我猜这不可行,因为检索到的令牌只能由Android应用程序使用,但谁知道呢?也许它可以以某种方式重复使用?
答案 0 :(得分:2)
您从Android API获得的令牌可以发送到您的服务器,服务器可以通过查询图表来检查令牌的有效性(例如,使用/ me?auth_token = ....)。 问题是任何第三方都可以使用相同的令牌 - 它不是特定于客户端的 - 所以如果您基于此确定服务器身份,则会遇到问题(因为第三个应用程序可以使用其用户令牌并获得您的身份验证)。我正试图找到解决这个问题的方法,但我还没有好主意......
答案 1 :(得分:0)
Facebook实际上有一个Android SDK可以让你这样做。可以找到信息here。
答案 2 :(得分:0)
是的,你可以。有效的访问令牌是有效的访问令牌。 Graph API来自令牌的来源,但只有令牌具有访问图api的该部分的适当权限。但请记住,令牌仅在发布后24小时内有效。 (这真的是一个字吗?)从发布之日起?
答案 3 :(得分:0)
当使用带有SingleSignOn(SSO)的facebook android sdk时,访问令牌格式实际上已更改。 而不是获得包含userid&的传统身份验证令牌。会话密钥作为authToken的一部分 现在我们得到了不同格式的authToken
由于Facebook开发人员仍在使用新格式化的访问令牌来支持其余的apis 同时我们可以通过在32665(在Facebook.java中)将DEFAULT_AUTH_ACTIVITY_CODE更改为-1来禁用Android facebook sdk上的SSO 这将调用传统的拨号来授予访问令牌,作为回报,你将获得访问令牌,其中包含会话密钥。
那些正在寻找生成安全会话密钥的人需要在Facebook.java中添加自己的方法,如
public String getSessionSecret(String accessToken)抛出MalformedURLException,IOException { Bundle b = new Bundle(); b.putString(“method”,“auth.promoteSession”); b.putString(“access_token”,accessToken); b.putString(“session_key_only”,“true”); 字符串响应=请求(b); 回复; }