【问题标题】:Facebook auth token exchangeFacebook 身份验证令牌交换
【发布时间】:2011-06-10 22:08:09
【问题描述】:

是否可以使用 Android 应用程序从 Facebook 检索的身份验证令牌在服务器端对用户进行身份验证? 换句话说,Android 应用程序使用 SSO 并获取身份验证令牌。然后将此令牌发送到部署在 Google App Engine 上的后端应用程序。然后后端应用程序使用令牌针对 Facebook 验证用户。

我想这是不可行的,因为检索到的令牌只能由 Android 应用程序使用,但谁知道呢?也许它可以以某种方式重复使用?

【问题讨论】:

    标签: android facebook google-app-engine


    【解决方案1】:

    您从 Android API 获得的 Token 可以发送到您的服务器,服务器可以通过查询图形来检查令牌的有效性(例如使用 /me?auth_token=....)。 问题是任何第三方都可以使用相同的令牌-它不是特定于客户端的-因此,如果您以此为基础进行服务器标识,则会遇到问题(因为第三个应用程序可以使用其用户令牌并由您进行身份验证)。我正在尝试找到解决此问题的方法,但我还没有好的想法...

    【讨论】:

      【解决方案2】:

      Facebook 实际上有一个 Android SDK 可让您执行此操作。信息可以在here找到。

      【讨论】:

      • 是的,我知道我可以在 Android 上进行 SSO。但问题是我是否可以与我的后端应用交换身份验证令牌?
      【解决方案3】:

      是的,你可以。有效的访问令牌是有效的访问令牌。 Graph API 确实来自令牌的来源,但只有令牌具有访问该部分图形 api 的适当权限。但请记住,令牌仅在其发行后 24 小时内有效。 (真的是一个词吗?)从它发出的那一刻起?

      【讨论】:

        【解决方案4】:

        当使用带有 SingleSignOn (SSO) 的 facebook android sdk 时,访问令牌格式实际上发生了变化。 而不是获取包含用户 ID 和会话密钥的传统身份验证令牌作为 authToken 的一部分 现在我们得到了不同格式的 authToken

        由于 Facebook 开发人员仍在使用新格式的访问令牌支持其他 api 同时,我们可以通过将 DEFAULT_AUTH_ACTIVITY_CODE 从 32665(在 Facebook.java 中)更改为 -1 来禁用 android facebook sdk 上的 SSO 这将调用传统对话来授予访问令牌,作为回报,您将获得其中包含会话密钥的访问令牌。

        那些正在寻找生成安全会话密钥的人需要在 Facebook.java 中添加自己的方法,例如

        public String getSessionSecret(String accessToken) 抛出 MalformedURLException, IOException { 捆绑 b = 新捆绑(); b.putString("方法", "auth.promoteSession"); b.putString("access_token", accessToken); b.putString("session_key_only", "true"); 字符串响应 = 请求(b); 返回响应; }

        【讨论】:

          猜你喜欢
          • 2018-10-27
          • 1970-01-01
          • 2011-12-01
          • 2022-06-11
          • 2014-05-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-13
          • 1970-01-01
          相关资源
          最近更新 更多