DEV Community

Cover image for 🔐 How to Protect Your Public Express API Using API Keys
Guillermo Olcina Martínez
Guillermo Olcina Martínez

Posted on

🔐 How to Protect Your Public Express API Using API Keys

If you're building an API in Express.js and plan to expose it publicly — maybe to clients, third-party devs, or internal tools — you need some way to control access.

One of the most common and effective ways to do this is using API keys.

In this post, I’ll walk you through a simple way to implement API key protection in your Express API. No fancy gateways, no unnecessary bloat — just straightforward logic you can build on.


🚧 Why API Keys?

API keys are unique tokens (usually strings) that your users include in their requests. You can:

  • Identify who's calling your API.
  • Set limits (like 1,000 requests per day).
  • Revoke keys if needed.
  • Analyze usage by key/project/client.

Perfect for public or semi-public APIs that don’t need full OAuth complexity.


🛠️ Basic API Key Middleware in Express

Here’s a minimal implementation:

// middleware/apiKey.js const validApiKeys = [ 'abc123', // In real use, store these in a DB 'def456', ]; export function apiKeyMiddleware(req, res, next) { const apiKey = req.header('x-api-key'); if (!apiKey || !validApiKeys.includes(apiKey)) { return res.status(401).json({ error: 'Unauthorized' }); } next(); } 
Enter fullscreen mode Exit fullscreen mode

And in your Express app:

import express from 'express'; import { apiKeyMiddleware } from './middleware/apiKey.js'; const app = express(); app.use('/api', apiKeyMiddleware); app.get('/api/data', (req, res) => { res.json({ message: 'Hello, world!' }); }); app.listen(3000, () => console.log('Server running on port 3000')); 
Enter fullscreen mode Exit fullscreen mode

🧠 A Few Tips

  • Store API keys in a database (with metadata like usage, owner, status).
  • Add rate limiting to prevent abuse.
  • Consider rotating keys over time.
  • Log each request to track usage per key.

⚡ Want to Skip the Boilerplate?

If you don’t want to build all this from scratch, you can use a tool like Limitly — it handles API key creation, validation, usage limits (daily, weekly, etc.), and request tracking with an SDK you can plug into your Express app.

I built it because I was tired of reinventing this every time I launched an API.


Let me know if you use a different method or have feedback — always happy to learn new approaches!

Top comments (0)