Passport似乎是简单身份验证的一个很好的选择,不引人注目且不难设置。我正在构建一个使用JWT进行身份验证的MEAN堆栈,因此我查看了Passport JWT。然而,有一些我感到困惑的事情。
1)假设Passport JWT仅用于验证请求,而不是用于生成有效的jwt,我是否正确?也就是说,它是否应仅用于验证令牌的存在?
2)passport.authorize
和passport.authenticate
之间的区别是什么?我何时应该使用另一个?
3)我有3条路线用于身份验证相关事宜,login
,signup
和authenticate
。
login
将检查用户电子邮件/密码组合是否存在并匹配,然后为客户端生成令牌。
signup
将检查以确保电子邮件尚未存在,然后为客户端生成令牌。
现在authenticate
这是我混淆了的地方。如果我已经authenticate
和login
,我是否还需要signup
路线?如果有的话,似乎身份验证将是我为JWT策略传递到passport.use
的功能,然后login
和signup
可能会添加verify_token
路由是我唯一没有保护的路线,其他所有路线都可以拨打passport.authenticate
或passport.authorize
。
答案 0 :(得分:7)
passport.authorize
的任何引用,所以我相信passport.authenticate
是您正在寻找的内容。您将在路由中使用passport.authenticate
来验证传入请求是否具有JWT令牌并且是允许的。login
和signup
生成令牌,authenticate
是多余且不必要的。只需确保在路由中使用passport.authenticate
来验证请求期间的访问权限。这里要记住的一般设置步骤是:
"Authorization: JWT eyJ0eXAiO..."
)中出现passport.authenticate
通过标头中的JWT令牌验证对传入请求的访问权限,例如:
router.post('/users', passport.authenticate('jwt', {session: false}), function(req, res) {
// do something...
});