Я использую 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 не запускается при каждом запросе.