node.js - Passport -facebook-token 与 Passport -facebook

标签 node.js facebook passport.js

对于 node.js 中的社交身份验证,我看到许多项目使用 passport-facebook-token包而不是默认的 passport-facebook . 我正在努力(并努力)了解这两个软件包之间的区别和好处 - 以及如何从另一个软件包中选择一个。任何见解表示赞赏。

最佳答案

答案

经过大量阅读后,我相信我已经理解了(至少是基础知识),为了其他人的利益,我在这里分享:

  • passport-facebook 使用OAuth2 — Authorization Code Grant 流程
  • passport-facebook-token 使用 OAuth2 — Implicit Grant 流程

看到这个很棒 article on oauth flows有关其中每一项的详细信息。可以在此 SO post 中找到为这些特定库定制的一些流程图。 .

一般困惑

在进行这项研究时显而易见的一点是,围绕身份验证最佳实践存在很多混淆。许多(也许是大多数)不清楚每个不同的 PassportJS 是什么时候。应使用策略(或流程)。

一些结论:

  • Authorization Code Grant 比隐式流更安全,因为它不直接与用户代理(通常是网络浏览器)共享第三方访问 token 。尽管有许多相反的文章,但只要 SPA 具有“专用服务器端组件”(例如 BFF-API),此将与 SPA 一起正常工作 (就像我正在尝试构建的 nestjs-bff 一样……这就是开始整个调查的首要原因)

  • 隐式授予 表示由于将访问 token 直接暴露给用户代理(通常是网络浏览器)而增加的安全漏洞。用例包括没有服务器端组件的 SPA 应用程序。最近,行业最佳实践已经从隐式授予转向授权代码授予,没有客户端密码,但使用 PCKE(证明 key 代码交换)...但这通常是 recommended for native mobile apps, rather then SPAs .

我的净收入:

如果您的客户端有任何专用的服务器端组件,请使用授权码授予 (passport-facebook) 而不是隐式授予 (passport-facebook-token)

邀请加入!

我希望这能帮助那些遇到与我相同问题的人。如果有人发现我所写内容有任何错误、遗漏或不正确的假设,请指出。

关于node.js - Passport -facebook-token 与 Passport -facebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51593219/

相关文章:

javascript - Express.js 响应发送回调

php - Facebook 需要 JSON php 扩展?>

满足 Facebook 需求的 Javascript SDK 与 PHP SDK

node.js - PassportJS - 如何获取 session 对象

node.js - 处理/search/:search(/filter1/:filter1)?等路径

node.js - 删除文档后未删除 mongoosastic 索引数据

node.js - 环回: Rename file from before remote method using context

iphone - 从 Sharekit 发布到 Facebook

node.js - 如何将 token 从中间件传递到路由

mysql - Sequelize findAll 不是一个函数