2012-05-14 55 views
1

我的应用程序使用在客户端的JavaScript的Facebook SDK授权和授权的用户获取应用程序的访问令牌来自Facebook的API,使用Facebook的cookie签名的请求,并提供code,并将其存储到数据库中。当我应该加载一个新的访问令牌?

一切工作正常,但我不知道,当我要刷新存储访问令牌?如果用户更改了密码,并且已经登录/重新连接,该怎么办?

据我了解,现在她有新的访问令牌,并且应用应该从Facebook加载它。但是我怎么能理解我什么时候应该检查新的令牌?使用facebook cookie检查每个请求cookie不起作用,因为每个用户每秒的请求数很少(事件如果她没有更改密码)。或者,也许我做错了什么?

我的意思是:

  • 我已经授权的客户端用户
  • 我有饼干与签名的请求
  • 签名的请求是相当足够的授权服务器端用户(验证用户凭据)
  • 我可以通过调用API的Facebook得到access token,随时随地当用户用户发出请求,我的应用程序(因为我需要签名的请求一个code)。所以,我这样做,当我没有存储access token或现有access token已过期。
  • access token只是存储在数据库中,并且可以随时使用,在不同的线程,也许几分钟后(意思是,我们没有与签名的请求用户请求和饼干)
  • 如果存储access token没有过期,但无效在脸上?我需要获取新的access token,但此时cookie已经消失。

目前我看到的只有一条路:从签名的请求商店code到DATABSE,当我们发现我们有无效access token,尝试加载它。但我记下确定它是正确的方式,并没有那么多的可用于大多数情况下

回答

3

您有客户令牌和服务器令牌,客户端是短暂的(几个小时)和服务器长期居住( 60天)。

在客户端的令牌不应该打扰你太多,因为你可以很容易地得到一个新的,因为它在“Handling Invalid and Expired Access Tokens”指南指出:

桌面Web和移动Web应用程序,其实现认证使用JavaScript SDK

调用FB.getLoginStatus()或确保状态:真正的设置,当你调用 FB.init()是指在你的 应用程序的用户的土地和被签署成为Facebook而言,下一次authResponse对象您 由于这些调用将包含新的有效的 访问令牌。

在这种情况下,它只需将用户的行为使用应用程序 其中隐含产生新的访问令牌。

在服务器端的令牌,你在db坚持,不能因为容易被复制,用户被发送到再次认证对话框:

桌面Web和移动其实现服务器端认证流程

为了获得在这种情况下,一个新的访问令牌的Web应用程序,您必须通过全面的服务器端流再次通过用户 :即获得一个代码和一个新的 交换它访问令牌。

然而,假设用户没有取消授权的应用程序, 当你把用户重定向到OAuth的对话框,用户不会被 提示重新授权您的应用程序,并会立即 重定向到您的REDIRECT_URI。这意味着重新验证 过程对用户来说可能看起来是透明的。

你当然可以发送一个客户端令牌给服务器并坚持这一点,但它是非常没有意义的,因为它是短暂的。 另一种选择是在服务器端使用客户端令牌的new endpoint to extend有效的然后坚持。

至于“如何知道什么时候获得一个新的令牌”,在服务器端,当您正在进行api请求时,只需检查响应并查看是否返回了错误,如果是这样的话(这里有一个列表我添加的第一个网址)。 如果令牌已过期,只需再次将用户发送到授权对话框(您可以将某种代码返回到客户端并从那里执行),然后将新令牌保存到数据库。

有没有必要检查cookie,这些都在后台使用,但你不应该有任何关系。


编辑

不要使用饼干,他们不应该在任何时候关注你。

你应该做的:

在服务器端,您应遵循Server-Side auth guide的说明,得到“代码”,并与辅币。 该令牌将有60天。

根据需要使用存储在数据库中的该令牌(其他线程,什么不是),以及当您从Facebook获取错误并说明令牌已过期时,只需将用户导航回授权对话页。

您不能使用“代码”来获取多个标记,这样不会对您有所帮助。 如果用户会话(和令牌)失效(出于各种原因),当您尝试发出api请求时,您仍然会从Facebook返回错误,当发生这种情况时,只需再次将用户发送到auth对话框。

+0

这是否意味着无法将客户端Javascript身份验证与服务器端身份验证结合起来?我的意思是,它足够服务器解析Facebook cookie来授权用户在服务器端。但是这个cookie不包含访问令牌,并且服务器不知道是currenlty存储的访问令牌是否仍然有效,或者不是。 –

+0

您没有理由参与cookie,请让SDK为您做。随着每个令牌的到期时间(应用令牌除外),你可以检查该令牌是否仍然有效,如果有的话,它有多长时间。至于js/server auth,正如我写的那样,你可以发送一个客户端令牌给服务器,但是这是毫无意义的,除非你扩展它。 –

+0

似乎我们正在谈论不同的事情。我已更新了我的问题,请你看一下,好吗? –

相关问题