护照JWT与授权 vs 认证

11

Passport对于简单的身份认证来说似乎是一个很好的选择,不显眼且易于设置。我正在构建一个使用JWT进行身份验证的MEAN堆栈,因此我想到了Passport JWT。然而,有几件事情让我感到困惑。

1)我是否正确地认为Passport JWT仅用于身份验证请求,而不用于生成有效的jwt?也就是说,它只应该用于验证令牌的存在吗?

2)passport.authorizepassport.authenticate之间有什么区别?何时应该使用其中的一个而不是另一个?

3)我有3个路由用于身份认证相关事项:loginsignupauthenticate

login将检查用户电子邮件/密码组合是否存在并匹配,然后为客户端生成一个令牌。 signup将检查电子邮件是否已存在,然后为客户端生成一个令牌。 现在,对于authenticate,这就是我感到有些混淆的地方。如果我已经有了loginsignup,那我还需要一个authenticate路由吗?如果有的话,似乎authenticate将是我传递给JWT策略的passport.use函数,然后loginsignup与可能会增加的verify_token路由将是我的唯一未受保护的路由,在这里,其他所有内容都将调用passport.authenticatepassport.authorize

1个回答

10
  1. 正确。Passport JWT(passport-jwt)仅用于验证请求。您需要另一个工具来实际生成令牌。这个教程使用了JWT Simple(jwt-simple),而我使用了jsonwebtoken(参见此参考资料)。
  2. 我没有看到任何有关passport.authorize的参考资料,因此我认为您要找的是passport.authenticate。在路由中使用passport.authenticate来验证传入的请求是否具有JWT令牌并且允许访问。
  3. 由于您通过loginsignup生成令牌,因此authenticate是多余和不必要的。只需确保在请求期间使用passport.authenticate验证访问权限即可。

在这里需要记住的一般设置步骤是:

  • passport-jwt用于身份验证
  • 您需要另一个工具来创建JWT令牌
  • 生成并返回给发出请求的内容的JWT令牌需要存在于后续请求的标头中("Authorization: JWT eyJ0eXAiO..."
  • 您需要设置JWT策略并告诉Passport使用它
  • 使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接