对于 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/