Express 会话和 PassportJS 之间的区别

Posted

技术标签:

【中文标题】Express 会话和 PassportJS 之间的区别【英文标题】:Difference between Express sessions and PassportJS 【发布时间】:2016-04-14 11:32:11 【问题描述】:

我正在考虑使用 express-session 为通过 OAuth 2 提供者身份验证的用户存储访问令牌,并为客户端应用程序提供安全签名的 cookie。

据我了解,然后我可以在会话存储服务器端(例如 mongodb)的后续请求中检索与 cookie 关联的令牌,然后我可以在请求中使用承载授权标头来使用 Express 分隔端点路线。

我遇到过 PassportJS 并试图弄清楚是否需要在我的设置中使用它。

目前我正在我的快速应用程序中处理登录 POST 请求,然后使用资源所有者密码凭据授予类型请求流发出访问令牌请求。这工作正常,我从提供商处收到了访问令牌以及刷新令牌和到期时间。

据我所知,PassportJS 为各种提供者提供了身份验证策略,但我不确定它是否支持在我的案例中使用的授权类型。另外,我已经在做请求和接收令牌的工作了,所以不确定 PassportJS 在这里对我有多大好处。

通过阅读 express-session 文档,我认为这将为我提供所需的一切,而且我可以根据从 api 网关返回的令牌到期时间设置 cookie 到期时间。

我认为 PassportJS 位于 express 会话之上,并且只是访问 express 生成的会话,对吗?

【问题讨论】:

【参考方案1】:

如果您已经实现了所需的身份验证策略并且只需要存储令牌来识别用户并让他们保持登录状态,那么您只需要 express-session。 express-session 使用的 session-cookie 在读取时进行签名验证等。

我认为 PassportJS 位于 express 会话之上,并且只是访问 express 生成的会话,对吗?

是的,没错。但是,您不必对 Passport.js 使用会话(请参阅 Passport.js 文档中的“禁用会话”)

Passport.js 文档 (http://passportjs.org/docs) 还阐明 Passport.js 只是身份验证中间件:

它旨在服务于一个单一的目的:验证请求。在编写模块时,封装是一种美德,因此 Passport 将所有其他功能委托给应用程序。

【讨论】:

以上是关于Express 会话和 PassportJS 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Passportjs 的会话问题

带有猫鼬的 PassportJS 只发送一半的数据

在 Passportjs 中刷新 JWT 令牌

如何使用 Express 和 PassportJS 正确报告无效登录?

PassportJS:如何在我的视图中获取 req.user

Express + PassportJS 无法读取 flash 消息