对 Facebook 网站整合的担忧。访问令牌
Posted
技术标签:
【中文标题】对 Facebook 网站整合的担忧。访问令牌【英文标题】:Concerns about Facebook integration in website. access-token 【发布时间】:2016-10-19 04:07:27 【问题描述】:首先我使用快递和护照。我想知道我是否采用这种方法,为什么我不需要包含在开发人员网站上阅读过的 javascript“SDK”。我有点困惑为什么护照不讨论SDK。我猜是因为 SDK 是用于客户端的,并且还有另一种方法可以用 Oauth 做同样的事情,这就是 passport-facebook
使用的。我想了解更多详情。
还有关于访问令牌。
在护照中我会这样做:
function(accessToken, refreshToken, profile, done)
...
newUser.facebook.token = accessToken;
此得到一个 “acccesToken” 像这样= EAAYrf9ixTA0BAPkSlXymZA3y2QwkDIlAB84XXCjQH2qxEgZAaP8kdZBqWZApZAd5ZCqyD4te6YkZAYTpMPGujYq88fRZC2HcrcgfzLBiFyIMXrRUpssNxW470SJ7muNkiZCKEDoejiSZBgvtJkQen8rnr2nctEvfzfUm P>
我想知道这是否对每个用户都不同?
It 说有 4 种不同类型的“访问令牌”,上面哪一种?你怎么知道的?
另外,我以为我在 SDK 指南中读到它会在 cookie 中设置 accessToken,但我没有看到
这就是我做console.log(req.session)
时得到的结果
cookie:
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true ,
passport: user: '5760703f8fd744e020920980'
【问题讨论】:
【参考方案1】:-
为什么我不需要带有 PassportJS 的 Facebook Javascript SDK?
Facebook 的客户端 SDK 允许您直接从 Facebook 获取身份验证 (FB.api('/me')
) 和会话数据 (FB.getLoginState
) 并将其设置在客户端的 cookie 中。使用 Passport 时,当您在路由和会话数据中调用 passport.authenticate
时,passport.js 会自动处理身份验证调用,但全部来自服务器端,并且您的代码更少。
此外,Facebook 只会为 Web 登录提供短期访问令牌,但会为服务器请求提供长期访问令牌。
-
每个用户的访问令牌是否不同?
它是独一无二的吗?是的。我没有看到它明确说明,但 Facebook 表示:
了解访问令牌的一个重要方面是它们是可移植的。获得访问令牌后,您可以使用它从移动客户端、Web 浏览器或从您的服务器到 Facebook 的服务器进行调用。如果在客户端上获得了令牌,您可以将该令牌发送到您的服务器并在服务器到服务器的调用中使用它。如果通过服务器调用获取令牌,您还可以将该令牌发送到客户端,然后从客户端进行调用。
我认为您实际上可能要问的是是否持久和the answer is no。它们将过期并重新生成。
短期令牌的寿命通常约为一两个小时,而长期令牌的寿命通常约为 60 天。您不应依赖这些生命周期保持不变 - 生命周期可能会在没有警告的情况下更改或提前到期。
-
它是哪种类型的访问令牌,您怎么知道?
这是一个User Access Token。 Passport 处理用户登录和用户身份验证,并返回用户个人资料信息,而不是与其他 3 种令牌类型相关的任何信息。
用户令牌是最常用的令牌类型。每当应用程序调用 API 以代表他们读取、修改或写入特定人的 Facebook 数据时,都需要这种访问令牌。用户访问令牌通常是通过登录对话框获取的,并且需要一个人允许您的应用获取。
-
SDK 说 accessToken 设置在 cookie 中。
Passport在session中没有显式存储accessToken,它一般存储一个用户唯一的标识,比如user._id
,当passport.session()
调用passport.serializeUser
,这样@时就可以找到一个用户对象987654330@ 被调用。您可以在“What does passport.session() middleware do?”中阅读更多内容。
【讨论】:
以上是关于对 Facebook 网站整合的担忧。访问令牌的主要内容,如果未能解决你的问题,请参考以下文章