【问题标题】:Bypass JWT with GraphQL and jwt-express使用 GraphQL 和 jwt-express 绕过 JWT
【发布时间】:2023-03-20 13:11:01
【问题描述】:

对于我的后端,我使用 Node.js、Express 和 GraphQL。我已经使用 jwt 实现了身份验证,如果没有用户登录,它将保护我的路由。问题是我希望某些路由不受保护,即您不必登录即可查看 /home

因为我在这个项目中使用 Express,所以我也有 jwt-express,他们提供了类似这样的东西:.unless({path: ['/token']})。现在,如果我有 REST-API,这将工作,但因为我只有 GraphQL 和 GraphQL有一条路行不通。

我的index.js 文件中只有这个:

app.use(jwt({secret: constants.JWT_SECRET}))

app.use(
 graphqlEndpoint,
 bodyParser.json(),
 graphqlExpress(async req => {
   let user = null
   if (req.user) {
     user = await knex(‘users’).where(‘id’, req.user.id).first()
     console.log(user)
   }
   return {
     schema,
     context: {user}
   }
 })
)

但我必须确保它让我进入,无论是否使用令牌。

所以我只是想知道是否有人对如何实现这一点有一些提示,因为我很困惑。

【问题讨论】:

  • 您能否与我分享您的方法,我在过去一周一直坚持这一点。如果我在中间件之前添加登录名(一个 graphqlExpress 但 graphql 端点相同),我将无法访问其他实体(其他 graphqlExpress 但端点 graphql 相同)。如果我在同一个 graphqlExpress 函数中添加错误是没有找到令牌,因为我在这里添加了中间件。 .我谷歌但没有关闭的解决方案。谢天谢地,我找到了你的帖子。请帮帮我,我被卡住了:(
  • @Tested 同上。关于这个或来源的任何解决方案?希望对此有一些指导。

标签: node.js express authentication jwt graphql


【解决方案1】:

如果您使用app.use(jwt({secret: constants.JWT_SECRET})),它将在每个请求中读取 JWT。有两种选择:

  • 您在所需的特定路由中应用中间件 已通过身份验证。
  • 您应该在使用 jwt 之前添加登录路由。

【讨论】:

  • 感谢您的回复。我想我现在必须做很多谷歌搜索,呵呵
【解决方案2】:

可以指定 express-jwt 让未注册用户通过:

app.use(jwt({
  secret: 'hello world !',
  credentialsRequired: false
}));

来源:express-jwt 的 README.md https://github.com/auth0/express-jwt

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2016-04-04
    • 2015-12-07
    • 1970-01-01
    • 2020-04-30
    • 2020-10-09
    • 2018-04-13
    • 2019-06-25
    • 2016-03-13
    相关资源
    最近更新 更多