为移动应用程序进行 facebook 登录的正确方法是啥(使用 node.js/passport.js 服务器)

Posted

技术标签:

【中文标题】为移动应用程序进行 facebook 登录的正确方法是啥(使用 node.js/passport.js 服务器)【英文标题】:What is the right way to do facebook login for mobile app (with node.js/passport.js server)为移动应用程序进行 facebook 登录的正确方法是什么(使用 node.js/passport.js 服务器) 【发布时间】:2014-06-25 09:17:18 【问题描述】:

我有一个与后端服务器配合使用的移动应用程序,我想了解使用 facebook 登录(创建帐户)然后保持整个系统同步的最佳做法。

这是我目前所理解的: - 移动应用可以在设备上登录并获取access_token - 访问令牌可以传输到服务器。我使用与某些 api.myhost.com/auth/facebook 路由挂钩的 passport-facebook-token 进行了概念验证,看来我可以对用户进行身份验证并检索他的 FB 数据。因此,我可以将他与我数据库中的现有用户进行匹配,也可以创建一条新记录。

我不明白的: 1) 我必须使用 https 将 FB 令牌传输到我的服务器吗?

2) 我应该如何处理其他应该经过身份验证的请求。我不认为每个请求都去 FB 是一种选择。想到的一个选项是生成另一个(我自己的)访问令牌并作为 FB 身份验证的结果返回它。

最简单的方法是使用 passport-facebook-token 会话(以便 cookie 会话 ID 可以序列化和反序列化为用户 ID)。但这意味着我需要为会话维护一些 KV 存储。

另一种方法是为该用户生成我自己的随机令牌,在成功登录时将其与用户 ID 一起返回,将其存储在用户记录中,并让来自客户端的每个 API 调用提供此 ID/令牌对并重新验证它们手动计时,不依赖护照。或者也许依靠护照本地策略?

哪个更好?各有什么优缺点?

2) 如果我确实打算使用 FB 令牌发布到 FB 并进行图形分析(朋友等),我 我计划将令牌存储在服务器上。我需要多久刷新一次?每次应用程序启动并刷新客户端上的令牌时,我是否应该使用新的 FB 令牌重新对服务器进行身份验证?通过服务器到服务器调用刷新用户 FB 令牌怎么样?如果我想保持对用户 FB 数据的访问,但用户停止使用我的或使用频率太低,我应该这样做吗?

是否有任何可行的方案的食谱?

谢谢!

【问题讨论】:

你有没有在这里找到任何有用的东西? 【参考方案1】:

Facebook 令牌安全

您在移动应用客户端上创建的令牌用于您在身份验证中提供 ID 的 Facebook 应用。在通过 Internet 或任何其他易失性信息通信令牌时,我总是使用 HTTPS。

Facebook 令牌过期和刷新

当您在移动应用程序中进行身份验证时,您通常会在带有令牌的响应中获得令牌的过期时间。令牌过期在Facebook API 中有说明。

使用 Facebook SDK 的原生移动应用将获得长效访问令牌,有效期约为 60 天。当使用您的应用程序的人向 Facebook 的服务器发出请求时,这些令牌将每天刷新一次。如果没有请求,令牌将在大约 60 天后过期,此人将不得不再次通过登录流程来获取新令牌。

关于刷新令牌:

即使是长期存在的访问令牌最终也会过期。在任何时候,您都可以通过将人员发送回您的 Web 应用程序使用的登录流程来生成新的长期令牌 - 请注意,此人实际上不需要再次登录,他们已经授权您的应用程序,因此他们将立即使用刷新的令牌从登录流程重定向回您的应用程序 - 人们对此的显示方式将根据您使用的登录流程类型而有所不同,例如,如果您使用的是 javascript SDK,这将发生在后台,如果您使用的是服务器端流程,浏览器将快速重定向到登录对话框,然后自动立即再次返回您的应用。

【讨论】:

以上是关于为移动应用程序进行 facebook 登录的正确方法是啥(使用 node.js/passport.js 服务器)的主要内容,如果未能解决你的问题,请参考以下文章

使用 facebook 登录作为移动应用程序的身份验证。

移动应用程序中的 Facebook 登录(由 REST API 支持)

在没有浏览器的移动设备上使用 HTTP 进行 Facebook 登录验证

Facebook 登录后,Swift 项目没有正确地进行 segue

Facebook 登录无法在移动设备上使用(但可以在桌面设备上使用)

iOS - 使用 auth0 删除同意对话框 3rd 方身份验证