WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Node.js · Expert · question 71 of 100

How do you ensure secure communication between microservices in a distributed Node.js application?

📕 Buy this interview preparation book: 100 Node.js questions & answers — PDF + EPUB for $5

To ensure secure communication between microservices in a distributed Node.js application, you have several options. Some of the most common and effective methods include the use of HTTPS/TLS, API keys, JSON Web Tokens (JWT), and OAuth.

1. HTTPS/TLS

Using HTTPS (HTTP Secure) ensures that the data transmitted between the client and server is encrypted using TLS (Transport Layer Security) protocol. This prevents eavesdroppers from intercepting or tampering with the data.

In Node.js, you can create an HTTPS server using the https built-in module, like so:

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('private-key.pem'),
  cert: fs.readFileSync('public-cert.pem')
};

const server = https.createServer(options, (req, res) => {
  // Handle the request
});

server.listen(3000);

Create a certificate and private key with OpenSSL:

openssl req -x509 -newkey rsa:2048 -keyout private-key.pem -out public-cert.pem -days 365

2. API Keys

API keys are unique identifiers that are assigned to each microservice. They are passed along with requests to authenticate and authorize access to the resources.

In Node.js, you can implement API keys using Express middleware:

const express = require('express');
const app = express();

const API_KEYS = ['api_key_1', 'api_key_2'];

const authenticateApiKey = (req, res, next) => {
  const apiKey = req.get('X-API-Key');

  if (!apiKey || !API_KEYS.includes(apiKey)) {
    return res.status(401).json({ message: 'Unauthorized' });
  }

  next();
};

app.use(authenticateApiKey);

// Routes

3. JSON Web Tokens (JWT)

JSON Web Tokens (JWT) are an open, industry-standard for representing claims securely between two parties. JWTs are compact, self-contained, and can securely transmit information between microservices.

In Node.js, you can implement JWT using the jsonwebtoken library:

npm install jsonwebtoken

Here’s an example of creating a JWT and verifying it in a middleware using Express:

const express = require('express');
const jwt = require('jsonwebtoken');

const SECRET = 'your-secret-key';

const app = express();

const authenticateJwt = (req, res, next) => {
  const token = req.get('Authorization');

  if (!token) {
    return res.status(401).json({ message: 'Unauthorized' });
  }

  jwt.verify(token, SECRET, (err, decoded) => {
    if (err) {
      return res.status(401).json({ message: 'Unauthorized' });
    }

    req.user = decoded;
    next();
  });
};

const generateJwt = (payload) => {
  return jwt.sign(payload, SECRET);
};

app.use(authenticateJwt);

// Routes

4. OAuth

OAuth is an open standard for token-based authentication and authorization. It allows microservices to grant access without sharing security credentials by using access tokens.

In Node.js, you can implement OAuth using OAuth 2.0 libraries, such as ‘oauth2-server‘:

npm install oauth2-server

Then create an OAuth server using Express middleware:

const express = require('express');
const OAuth2Server = require('oauth2-server');

const app = express();

// Model defines how token generation, revoking, and users are managed
const model = require('./your-model');

const oauth = new OAuth2Server({
  model,
  accessTokenLifetime: 60 * 60,
  allowBearerTokensInQueryString: true
});

const request = new OAuth2Server.Request(req);
const response = new OAuth2Server.Response(res);

app.use((req, res, next) => {
  oauth.authenticate(request, response)
    .then((token) => {
      req.user = token;
      next();
    })
    .catch((err) => {
      res.status(err.code || 401).json({ message: 'Unauthorized' });
    });
});

// Routes

Implement and use a combination of these methods to ensure secure communication between microservices in your distributed Node.js application.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Node.js interview — then scores it.
📞 Practice Node.js — free 15 min
📕 Buy this interview preparation book: 100 Node.js questions & answers — PDF + EPUB for $5

All 100 Node.js questions · All topics