Проверка CN с использованием Apollo Server - PullRequest
0 голосов
/ 15 апреля 2020

Я использую Apollo Server для моей реализации GraphQL, я хотел бы сделать проверку CN для моих входящих запросов. Я использую библиотеку промежуточного ПО apollo-server- express в сочетании с модулем NodeJS HTTPS. Однако я не могу проверить входящие запросы, используя app.use. Моя реализация похожа на документацию Apollo:

import express from 'express'
import { ApolloServer } from 'apollo-server-express'
import typeDefs from './graphql/schema'
import resolvers from './graphql/resolvers'
import fs from 'fs'
import https from 'https'
import http from 'http'

const configurations = {
  // Note: You may need sudo to run on port 443
  production: { ssl: true, port: 443, hostname: 'example.com' },
  development: { ssl: false, port: 4000, hostname: 'localhost' }
}

const environment = process.env.NODE_ENV || 'production'
const config = configurations[environment]

const apollo = new ApolloServer({ typeDefs, resolvers })

const app = express()
apollo.applyMiddleware({ app })

// Create the HTTPS or HTTP server, per configuration
var server
if (config.ssl) {
  // Assumes certificates are in a .ssl folder off of the package root. Make sure 
  // these files are secured.
  server = https.createServer(
    {
      key: fs.readFileSync(`./ssl/${environment}/server.key`),
      cert: fs.readFileSync(`./ssl/${environment}/server.crt`)
    },
    app
  )
} else {
  server = http.createServer(app)
}

server.listen({ port: config.port }, () =>
  console.log(
    '? Server ready at',
    `http${config.ssl ? 's' : ''}://${config.hostname}:${config.port}${apollo.graphqlPath}`
  )
)

В дополнение к этому я добавил это для проверки входящих запросов, однако все запросы, кажется, проходят его проверку, как будто app.use не срабатывает при доступе к моему API:

app.use(function (req, res, next) {
   console.log("INCOMING REQUEST")
   if (!req.client.authorized) {
       return res.status(401).send('User is not authorized');
   }
   #examine the cert itself, and even validate based on that!
   var cert = req.socket.getPeerCertificate();
   if (cert.subject) {
       console.log(cert.subject.CN);
   }
   next();
});

Поэтому мне интересно, как я проверял бы каждый запрос перед отправкой ему приложения Apollo express? Сейчас кажется, что app.use не запускается при каждом запросе.

...