护照JWT&授权与身份验证
问题描述:
护照似乎是简单身份验证的不错选择,不显眼且不难设置。我正在构建一个使用JWT进行身份验证的MEAN栈,因此我期待Passport JWT。但是我有些事情我很困惑。护照JWT&授权与身份验证
1)我正确地认为Passport JWT仅用于验证请求,不用于生成有效的jwt?也就是说,它是否仅用于验证令牌的存在? 2)passport.authorize
和passport.authenticate
有什么不同?我应该什么时候使用一个呢?
3)我有3条路线用于认证相关事宜,login
,signup
和authenticate
。
login
将检查用户电子邮件/密码组合是否存在并匹配,然后为客户端生成令牌。 signup
将检查以确保电子邮件不存在,然后为客户端生成令牌。 现在为authenticate
这是我有点混淆。如果我已经有login
和signup
,我甚至需要authenticate
路线吗?如果有的话,似乎验证将是我通过passport.use
为JWT战略,然后login
和signup
与可能增加的verify_token
路线将是我唯一不受保护的路线,其中一切都会打电话给passport.authenticate
或passport.authorize
。
答
- 正确。 Passport JWT(passport-jwt)仅用于验证请求。您需要另一个工具来实际生成令牌。 This tutorial使用JWT Simple(jwt-simple),我使用了jsonwebtoken(根据this reference)。
- 我还没有看到任何对
passport.authorize
的引用,所以我相信passport.authenticate
是你要找的。passport.authenticate
是您在路由中用来验证传入请求是否具有JWT令牌并且是允许的。 - 由于您通过
login
和signup
生成令牌,因此authenticate
是多余且不必要的。请确保您在路线中使用passport.authenticate
以验证请求期间的访问权限。
一般安装步骤,记住这里是:
- 护照,智威汤逊是认证
- 需要使用另一个工具来创建一个JWT令牌
- 的JWT令牌,你生成并返回到提出请求的任何内容,需要在后续请求中存在于标头(
"Authorization: JWT eyJ0eXAiO..."
) - you need to setup your JWT strategy and tell passport to use it
- 使用
passport.authenticate
验证通过JWT令牌访问中收到的请求的头,如:
router.post('/users', passport.authenticate('jwt', {session: false}), function(req, res) {
// do something...
});
如果你能http://stackoverflow.com/questions/44044394/请帮助how-to-set-jwtfromrequest-i-am-not-using-authorization-here @ user3006381 – Aditya