我使用PassportJS,并使用passport discord进行oauth登录。
到目前为止,我对这个流程没有任何真正的问题,尽管出现了一个重大问题。
authRouter.get('/didiscord',passport.authenticate('discord',{session:false}((
authRouter.get('/discord/callback', passport.authenticate('discord', { session: false }), (req, res) => {
const token = jwt.sign(req.user , 'SECRET')
res.cookie('token', token, {
httpOnly: true,
maxAge: 60000
})
res.redirect(`http://localhost:3000`)
})
出于某种奇怪的原因,一旦我被重定向到我的主网站localhost:3000,cookie就会正常存储在那里。但是,如果我转到localhost:3001/,我会检查我的cookie,并看到那里也存储了一个cookie。
这是意料之中的事吗?这似乎是逻辑和安全方面的一个重大缺陷?我正是这样做的:https://www.passportjs.org/packages/passport-discord/
我正在使用cookie解析器以及
var DiscordStrategy = require('passport-discord').Strategy;
var scopes = ['identify', 'email', 'guilds', 'guilds.join'];
passport.use(new DiscordStrategy({
clientID: 'id',
clientSecret: 'secret',
callbackURL: 'callbackURL',
scope: scopes
},
function(accessToken, refreshToken, profile, cb) {
return cb(null, profile)
}));
由于某种奇怪的原因
这并不奇怪,这是cookie的工作方式,而且总是有效的。cookie绑定到域,而不是端口。这不是安全缺陷。在生产中,您只能使用两个端口,即80或443。您不会有一个在端口3000上侦听的应用程序直接暴露给您的用户。
如果在开发过程中需要将cookie限制在一个应用程序中,您可以配置指向localhost的域(请参阅注释中添加的链接@Aziz(,也可以在cookie上设置path
属性。这样,只有在调用给定路径时,浏览器才会发送cookie。