【问题标题】:Get user ID on every app server request获取每个应用服务器请求的用户 ID
【发布时间】:2012-09-01 14:41:20
【问题描述】:

我正在开发一个加载在 FB 画布中的 FB 应用程序。我使用 Java 和 Spring 作为服务器端技术。在应用程序加载时,FB 请求 POST 我在 FB 的应用程序帐户中配置的 URL,包括用于用户授权的 signed_request 参数。这样我就可以安全地获取登录的用户ID。

我想知道在每次调用中从画布内的 HTML 到我的应用网络服务器(在 signed_request 调用之后)获取登录用户 ID 的最佳方法是什么?

谢谢!

【问题讨论】:

    标签: java facebook facebook-apps facebook-app-requests


    【解决方案1】:

    我会这样做:

    1. 验证用户一次并获取signed_request参数。
    2. 将其存储在针对用户的内部地图/数据库中。
    3. cryptographic nonce 与随请求一起返回的每个传出响应相关联,并可用于查找正确的用户。
    4. 所有这些都发生在 servlet 过滤器中(如果有的话,它在 Spring MVC 中等效),因为这是所有传入请求和传出响应的横切关注点。

    我的两分钱!

    【讨论】:

    • 对于一个简单的任务来说听起来很麻烦。设置一个包含用户详细信息的 cookie,然后在每个请求中发送它,并在服务器中验证它呢? FB没有提供更简单的方法吗?谢谢。
    • Nonce 是为了防止 cookie 可能发生的重放攻击。此外,HTTP 是无状态的,这个责任将留给应用程序,尽管可能有一些库提供了开箱即用的功能。不是 facebook 或任何其他应用程序应该提供的。
    【解决方案2】:

    如果用户尚未对应用进行身份验证,您将无法获取 Facebook 用户 ID。当用户被授权时,用户 id 将始终与 signed_request 一起传递。

    【讨论】:

    • 自从用户通过身份验证和授权后,我正在询问每个请求。
    • 如果用户已经获得授权,为什么不将他们的用户 ID 以及您需要的其他详细信息(如 access_token)存储在会话变量中?
    • 我只是在寻求最好的方法来做到这一点。挂钩会话是一种选择,谢谢。
    • @Igy 是对的。任何内部导航都不应再依赖 Facebook。 signed_request 旨在保存在会话中并仅在引发 OAuth 异常或类似情况时重新验证。
    • 那么,这不应该有所有的facebook-* 标签。
    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2018-01-09
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多