ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js API のセキュリティ保護: 認証の簡単なガイド

Node.js API のセキュリティ保護: 認証の簡単なガイド

DDD
DDDオリジナル
2024-09-19 00:29:32874ブラウズ

Securing a Node.js API: A Simple Guide to Authentication

Node.js API を構築し、それをセキュリティで保護したいので、選択する必要があるいくつかのオプションを確認しました。そこで、基本認証JWT (JSON Web Token)API キーという 3 つの一般的な認証方法について説明します。

1.ベーシック認証

それは何ですか?

Basic 認証は非常に簡単です。クライアントは、各リクエストの Authorization ヘッダーでユーザー名とパスワードを送信します。実装は簡単ですが、資格情報は Base64 でのみエンコードされる (暗号化されない) ため、HTTPS を使用しない限り、最も安全であるとは言えません。

実装方法

Express を使用して API に Basic 認証を追加するには、次のものが必要です:

  1. basic-auth パッケージをインストールします。
   npm install basic-auth
  1. 認証ミドルウェアを追加します。
   const express = require('express');
   const basicAuth = require('basic-auth');

   const app = express();

   function auth(req, res, next) {
     const user = basicAuth(req);
     const validUser = user && user.name === 'your-username' && user.pass === 'your-password';

     if (!validUser) {
       res.set('WWW-Authenticate', 'Basic realm="example"');
       return res.status(401).send('Authentication required.');
     }
     next();
   }

   app.use(auth);

   app.get('/', (req, res) => {
     res.send('Hello, authenticated user!');
   });

   const PORT = process.env.PORT || 3000;
   app.listen(PORT, () => {
     console.log(`Server is running on port ${PORT}`);
   });

テストしてみる

curl を使用して基本認証をテストします:

curl -u your-username:your-password http://localhost:3000/

ヒント: 認証情報が確実に保護されるように、常に HTTPS 経由の基本認証を使用してください。


2. JWT (JSON ウェブトークン)

それは何ですか?

JWT は、ユーザーを認証するためのより安全でスケーラブルな方法です。リクエストごとに認証情報を送信する代わりに、サーバーはログイン時にトークンを生成します。クライアントは、後続のリクエストの Authorization ヘッダーにこのトークンを含めます。

実装方法

まず、必要なパッケージをインストールします。

npm install jsonwebtoken express-jwt

JWT 認証を設定する方法の例を次に示します:

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

const app = express();
const secret = 'your-secret-key';

// Middleware to protect routes
const jwtMiddleware = expressJwt({ secret, algorithms: ['HS256'] });

app.use(express.json()); // Parse JSON bodies

// Login route to generate JWT token
app.post('/login', (req, res) => {
  const { username, password } = req.body;

  if (username === 'user' && password === 'password') {
    const token = jwt.sign({ username }, secret, { expiresIn: '1h' });
    return res.json({ token });
  }

  return res.status(401).json({ message: 'Invalid credentials' });
});

// Protected route
app.get('/protected', jwtMiddleware, (req, res) => {
  res.send('This is a protected route. You are authenticated!');
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

テストしてみる

まず、ログインしてトークンを取得します:

curl -X POST http://localhost:3000/login -d '{"username":"user","password":"password"}' -H "Content-Type: application/json"

次に、トークンを使用して保護されたルートにアクセスします。

curl -H "Authorization: Bearer <your-token>" http://localhost:3000/protected

JWT は、トークンに有効期限があり、リクエストごとに資格情報を送信する必要がないため、優れています。


3. APIキー認証

それは何ですか?

API キー認証は簡単です。各クライアントに一意のキーを与え、クライアントはそれをリクエストに含めます。実装は簡単ですが、同じキーが何度も再利用されるため、JWT ほど安全性や柔軟性はありません。最終的には、API 呼び出しの数を制限するために簡単に使用できる堅牢なソリューションが得られ、多くの Web サイトで使用されています。追加のセキュリティ対策として、リクエストを特定の IP に制限できます。

実装方法

これには特別なパッケージは必要ありませんが、dotenv を使用して API キーを管理することをお勧めします。まず、dotenv をインストールします:

npm install dotenv

次に、API キー認証を使用して API を作成します。

require('dotenv').config();
const express = require('express');
const app = express();

const API_KEY = process.env.API_KEY || 'your-api-key';

function checkApiKey(req, res, next) {
  const apiKey = req.query.api_key || req.headers['x-api-key'];

  if (apiKey === API_KEY) {
    next();
  } else {
    res.status(403).send('Forbidden: Invalid API Key');
  }
}

app.use(checkApiKey);

app.get('/', (req, res) => {
  res.send('Hello, authenticated user with a valid API key!');
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

テストしてみる

次の方法で API キー認証をテストできます:

curl http://localhost:3000/?api_key=your-api-key

またはカスタムヘッダーを使用します:

curl -H "x-api-key: your-api-key" http://localhost:3000/

認証方式の概要

  • 基本認証:

    • 長所: セットアップが簡単です。
    • 短所: 資格情報はリクエストごとに送信されるため、HTTPS 経由で使用する必要があります。
    • ユースケース: 少数のユーザーによるシンプルな API。
  • JWT 認証:

    • 長所: 安全で、ステートレスで、拡張性に優れています。
    • 短所: 基本認証よりも複雑です。
    • ユースケース: 堅牢なセキュリティを必要とするスケーラブルな API。
  • API キー認証:

    • 長所: シンプルで広く使用されています。
    • 短所: API キーは JWT に比べて安全性が低く、管理が困難です。
    • ユースケース: ユーザー管理を行わずにクライアントを認証する単純な API。

結論

すばやく簡単な認証を探している場合は、基本認証 を使用できますが、HTTPS を使用することを忘れないでください。より堅牢でスケーラブルなセキュリティが必要な場合は、JWT を選択してください。軽量 API または内部 API の場合は、API キー 認証で十分な場合があります。

どの認証方法を使用する予定ですか、それとも他のソリューションがありますか?コメント欄でお知らせください!

以上がNode.js API のセキュリティ保護: 認証の簡単なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。