Apollo GraphQL:如何设置安全的WebSocket?

Apollo GraphQL:如何设置安全的WebSocket?,websocket,graphql,apollo,apollo-client,apollo-server,Websocket,Graphql,Apollo,Apollo Client,Apollo Server,我正在将我的开发系统设置为使用https,Chrome抱怨我的websocket不安全: VM4965:161混合内容:“”处的页面已被删除 已通过HTTPS加载,但尝试连接到不安全的WebSocket 端点“ws://mywebsite.io:4000/subscriptions”。这项请求已被批准 被封锁;此端点必须在WSS上可用 以下是我当前基于Apollo文档的WS服务器端设置: const localHostString = 'mywebsite.io'; const pubsub

我正在将我的开发系统设置为使用
https
,Chrome抱怨我的websocket不安全:

VM4965:161混合内容:“”处的页面已被删除 已通过HTTPS加载,但尝试连接到不安全的WebSocket 端点“ws://mywebsite.io:4000/subscriptions”。这项请求已被批准 被封锁;此端点必须在WSS上可用

以下是我当前基于Apollo文档的WS服务器端设置:

const localHostString = 'mywebsite.io'; 
const pubsub = new PubSub();

// additional context you use for your resolvers, if any
const context = {connectors: connectors};

//SET UP APOLLO QUERY / MUTATIONS / PUBSUB
//start a graphql server with Express handling a possible Meteor current user
createApolloServer({
    schema,
    context
});

const METEOR_PORT = 3000;
const GRAPHQL_PORT = 4000;
const server = express();

server.use('*', cors({ origin: `https://${localHostString}:${METEOR_PORT}` }));

server.use('/graphql', bodyParser.json(), graphqlExpress({
    schema,
    context
}));

server.use('/graphiql', graphiqlExpress({
    endpointURL: '/graphql',
    subscriptionsEndpoint: `ws://${localHostString}:${GRAPHQL_PORT}/subscriptions`
}));

// Wrap the Express server
const ws = createServer(server);
ws.listen(GRAPHQL_PORT, () => {
    console.log(`GraphQL Server is now running on http://${localHostString}:${GRAPHQL_PORT}`);
    console.log(`GraphiQL available at http://${localHostString}:${GRAPHQL_PORT}/graphiql`);
    // Set up the WebSocket for handling GraphQL subscriptions
    new SubscriptionServer({
        execute,
        subscribe,
        schema
    }, {
        server: ws,
        path: '/subscriptions',
    });
});
我如何更新它以便使用WSS而不是WS-WebSocket


提前感谢所有人提供的任何信息。

看起来你正在做

subscriptionsEndpoint: `ws://${localHostString}:${GRAPHQL_PORT}/subscriptions
也许相反,将
ws
更改为
wss
。即:

subscriptionsEndpoint: `wss://${localHostString}:${GRAPHQL_PORT}/subscriptions

你在这个问题上运气好吗?是的。当时,我用ngrok解决了这个问题,只是为了发展。我为https和wss分别设置了一个ngrok URL。Ngrok通过从我的本地开发系统(仍然在http和ws上)提供数据来处理对这些安全URL的调用。然而,当我最近尝试使用最新的服务器/客户端代码和最新的Apollo库时,我在Firefox中看到了错误,一些ngrok软件包没有加载。目前我正在将我的应用程序放在Galaxy上。出于使用https/wss进行开发的目的,我可能必须在本地开发系统上安装SSL证书。