【问题标题】:Passport JWT & Authorize vs AuthenticatePassport JWT & Authorize vs Authenticate
【发布时间】:2016-01-01 16:32:36
【问题描述】:

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

【问题讨论】:

    标签: passport.js mean-stack jwt


    【解决方案1】:
    1. 正确。 Passport JWT (passport-jwt) 仅用于验证请求。您将需要另一个工具来实际生成令牌。 This tutorial 使用 JWT Simple (jwt-simple),我使用了 jsonwebtoken(根据 this reference)。
    2. 我没有看到对passport.authorize 的任何引用,所以我相信passport.authenticate 就是您要找的。 passport.authenticate 是您将在路由中用于验证传入请求是否具有 JWT 令牌并被允许的内容。
    3. 由于您通过loginsignup 生成令牌,所以authenticate 是多余且不必要的。只需确保在路由中使用 passport.authenticate 来验证请求期间的访问权限。

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

    • passport-jwt 用于身份验证
    • 您需要另一个工具来创建 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...
    });

    【讨论】:

    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 2017-10-05
    • 2018-04-02
    • 2016-04-24
    • 2017-10-07
    • 2018-11-29
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多