护照JWT策略是否与OAuth冲突?

时间:2017-05-12 06:00:09

标签: node.js session express oauth passport.js

在我的网络应用程序(node express)中,我使用JWT来保持用户的身份验证状态。由于我使用的是JWT,因此我在护照配置中关闭了session

passport.authenticate('jwt', { session: false });

现在我需要与Xero(或Twitter,无论如何)集成,OAuth策略在three legged flow之后需要用户授权时到位。

但是,当护照通过OAuth策略进行身份验证时,会显示错误:

Error: OAuthStrategy requires session support. Did you forget app.use(express.session(...))?

错误消息中的session是否与我在护照设置中关闭的会话相同?如果是这样,为什么护照强迫我在已经拥有JWT时使用sessions

修改

我没有尝试允许第三方网站的用户在没有注册的情况下登录我的网站。我只需要用户授权,这样他们就可以通过我的网站访问第三方API。我做错了,比如,我应该使用

passport.authenticate('token')

而不是当前

passport.authenticate('xero-oauth') 

1 个答案:

答案 0 :(得分:0)

Oauth需要快速会话。因此,您必须使用:

app.use(session(...));

默认情况下,护照建立持久登录会话。您可以通过以下方式将其关闭:

passport.authenticate('xero-oauth' , { session: false }); 

现在服务器上没有存储任何用户会话,您必须随每个api请求一起发送JWT。因此,Oauth不会与JWT冲突,您可以将它们一起使用。

您可以遵循此blog