测试安全的 graphql 订阅

Posted

技术标签:

【中文标题】测试安全的 graphql 订阅【英文标题】:Test a secure graphql subscription 【发布时间】:2019-03-10 11:24:57 【问题描述】:

我正在尝试在我的应用程序中测试用于保护 graphql 订阅的配置。

这是我在 ApolloServer 构造函数中的配置:

  const app = express();

  const jwt_authentication = jwt(
    secret: JWT_SECRET,
    credentialsRequired: false
  )

  const server = new ApolloServer(
    typeDefs,
    resolvers,
    introspection: true,
    playground: true,
    formatError: error => 
      console.log(error);
    ,
    context: async (req, connection ) => 
      if (connection) 
        return connection.context;
       else 
        return some_method_to_return_user_info;
      
    ,
    subscriptions: 
      onConnect: async (connectionParams, webSocket, context) => 
        const user = await jsonwebtoken.verify(connectionParams.jwt, JWT_SECRET);

        const userInfo= some_method_to_return_user_info;
        if (userInfo) 
           return  user: userInfo ;
        

        throw new Error("Unauthorized subscription");
      
    
  );

  app.use(GRAPHQL_PATH, jwt_authentication);
  //...

当我在 GraphQL Playground 中运行订阅时出现错误:

jwt must be provided

我用标题"Authorization": "Bearer MY_TOKEN" 测试,然后用"jwt": "MY_TOKEN" 进行测试,但我相信它没有那么简单。

是否有可能在不实现客户端代码的情况下测试我的订阅?

【问题讨论】:

【参考方案1】:

我通过以这种方式添加 HTTP 标头使其在 GraphQL Playground 中工作:


  "jwt": "MY_TOKEN"

【讨论】:

以上是关于测试安全的 graphql 订阅的主要内容,如果未能解决你的问题,请参考以下文章

嵌入 Jetty 10 的 GraphQL 订阅

如何在 jest / apollo 客户端中捕获被拒绝的 graphql 订阅?

React 模拟 Graphql 订阅

GraphQL:突变运行时订阅未触发

GraphQL 订阅和 WebSocket 协议有啥区别?

Postman GraphQL Beta 支持订阅吗