不允许使用 JWT 令牌保护 GraphQL 端点

Posted

技术标签:

【中文标题】不允许使用 JWT 令牌保护 GraphQL 端点【英文标题】:Not allowed to secure GraphQL endpoint with JWT token 【发布时间】:2017-05-13 07:38:08 【问题描述】:

我正在运行一个快速服务器,只是在我的端点上设置了 JWT 保护。我正在测试我的 /graphql 端点,我收到 403 Not allowed to provide a JWT token 错误。我的其他端点工作正常,所以我不认为这是 JWT 签名或验证的问题。有什么想法吗?

var jwt = require('express-jwt');

var app = express();

var jwtCheck = jwt(
   secret: new Buffer(config.secret, 'base64'),
   audience: aud,
   issuer: iss
);

// enforce on all endpoints
app.use(jwtCheck);

app.use('/', postgraphql(config.db_string, config.db_schema, 
    development: true,
    log: true,
    secret: config.secret,
    graphiql: true,
));

【问题讨论】:

没有一些代码是无法分辨的...... @miparnisari 没什么可分享的。这是express 服务器上的普通graphql 端点 你能分享这个端点的代码吗?另外,必须有一个中间件功能做JWT保护,你能分享一下吗? @miparnisari Gotcha,更新:) 好的,谢谢。但是您共享了中间件功能的代码,我们也需要端点的代码。 【参考方案1】:

想通了,问题在于没有将正确的参数传递给PostgraphQL。如果您将 Authorization 标头中的 JWT 令牌传递给 PostgraphQL,则它需要一个秘密。如果 secret 不存在,则PostgraphQL 将抛出错误 403 Not allowed to provide a JWT 错误。

【讨论】:

我相信此行为已在 v3.3.0 中修复

以上是关于不允许使用 JWT 令牌保护 GraphQL 端点的主要内容,如果未能解决你的问题,请参考以下文章

JWT 在未经身份验证的端点上进行 CSRF 保护?

JWT 验证客户端?

基于类的视图django中的JWT验证

带有 Passport JWT 的 Apollo 服务器

JWT 令牌登录和注销

使用AWS Android SDK发送JWT令牌