【发布时间】:2019-01-06 15:50:25
【问题描述】:
对于 node.js 中的社交身份验证,我看到许多项目使用 passport-facebook-token 包而不是默认的 passport-facebook。 我正在尝试(并且正在努力)了解这两个软件包之间的差异和好处 - 以及如何从另一个中选择一个。任何见解都值得赞赏。
【问题讨论】:
标签: node.js facebook passport.js
对于 node.js 中的社交身份验证,我看到许多项目使用 passport-facebook-token 包而不是默认的 passport-facebook。 我正在尝试(并且正在努力)了解这两个软件包之间的差异和好处 - 以及如何从另一个中选择一个。任何见解都值得赞赏。
【问题讨论】:
标签: node.js facebook passport.js
答案
经过大量阅读,我相信我已经了解(至少是基础知识),并在此分享以造福他人:
请参阅这个伟大的article on oauth flows,了解每一项的详细信息。可以在 SO post 中找到为这些特定库定制的一些流程图。
一般混淆
在进行这项研究时,显而易见的一点是,在身份验证最佳实践方面存在很多混淆。许多人(也许是大多数人)不清楚何时应该使用每种不同的PassportJS 策略(或流程)。
一些结论:
授权码授予比隐式流更安全,因为它不直接与用户代理(通常是网络浏览器)共享第三方访问令牌。尽管有许多相反的文章,只要 SPA 具有“专用服务器端组件”,例如 BFF-API(例如我正在尝试的 nestjs-bff建造……这就是整个调查的开始)
隐式授予表示由于将访问令牌直接暴露给用户代理(通常是网络浏览器)而导致的安全漏洞增加。用例包括没有服务器端组件的 SPA 应用程序。最近,行业最佳实践的趋势是从隐式授予转向授权代码授予,没有客户端机密,但使用 PCKE(证明密钥代码交换)......但通常是 recommended for native mobile apps, rather then SPAs。
我的网外卖:
如果您的客户端有任何专用的服务器端组件,请使用授权代码授予 (passport-facebook) 而不是隐式授予 (passport-facebook-token)。
邀请加入!
我希望这可以帮助那些发现自己和我有同样问题的人。如果有人发现我写的内容有任何错误、遗漏或不正确的假设,请加入。
【讨论】: