Apollo GraphQL: как настроить безопасные веб-сокеты?

Я настраиваю свою систему разработки для использования https, а Chrome жалуется на то, что мой веб-сокет не защищен:

VM4965: 161 смешанный контент: страница по адресу 'https://mywebsite.io/' была загружена через HTTPS, но попытка подключиться к небезопасной конечной точке WebSocket 'ws: //mywebsite.io: 4000 / subscriptions'. Этот запрос заблокирован; эта конечная точка должна быть доступна через WSS.

Вот моя текущая серверная установка для WS, основанная на документации Apollo:

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?

Заранее спасибо всем за любую информацию.


person VikR    schedule 08.09.2017    source источник
comment
вам повезло с проблемой?   -  person divramod    schedule 02.07.2018
comment
да. В то время я решил это только для целей разработки, используя ngrok. Я установил отдельный URL-адрес ngrok для https и для wss. Ngrok обрабатывал вызовы этих защищенных URL-адресов, обслуживая данные из моей локальной системы разработки, которая все еще находилась на http и ws. ОДНАКО, когда я недавно пробовал это с моим последним серверным / клиентским кодом и с последними библиотеками Apollo, я видел ошибки в Firefox, при этом некоторые пакеты ngrok не загружались. Сейчас я выкладываю свое приложение на Galaxy. Для целей разработки, использующих https / wss, мне, вероятно, придется установить сертификат SSL в моей локальной системе разработки.   -  person VikR    schedule 02.07.2018


Ответы (1)


Похоже, ты делаешь

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

Возможно, вместо этого замените ws на wss. то есть:

subscriptionsEndpoint: `wss://${localHostString}:${GRAPHQL_PORT}/subscriptions
person Mike Martin    schedule 19.07.2018