マニュアル:Node.jsにおけるJWT認証と認可

この記事では、JWTの動作の概要、そのメリットの説明、Node.jsでJWTベースの認証を実装するための操作手順を皆さんに紹介します。この記事から、Node.jsで開発されたAPIでの保護されたリソースにシームレスにアクセスするために、JWT認証を簡単に実装するワークフローを手に入れましょう。

中村 拓也

中村 拓也

12 5月 2025

マニュアル:Node.jsにおけるJWT認証と認可

JSON Web Token(JWT)は、Node.jsアプリにおける認証と認可を処理するためによく利用される方法としています。JWTはシンプルでコンパクトなトークンで、ユーザーを認証し情報を安全に送信するためにHTTPリクエストで簡単に渡すことができます。

この記事では、JWTの動作の概要、そのメリットの説明、Node.jsでJWTベースの認証を実装するための操作手順を皆さんに紹介します。この記事から、Node.jsで開発されたAPIでの保護されたリソースにシームレスにアクセスするために、JWT認証を簡単に実装するワークフローを手に入れましょう。

button

JWT (Json Web Token)とは

JWT (JSON Web Token) とは、JSON形式で記述されたトークンの一種です。JWTには3つの要素が含まれています。

これらはドット(.)で区切った文字列として表現されます。

xxxxx.yyyyy.zzzzz

JWT の特徴として、独自の署名機能によりデータの改ざん検知が可能であることがあげられます。またトークン単体でデータを含むため、サーバーでのデータ参照が不要なステートレスな認証が実現できます。これらの利点から、Web API等での認証・認可によく利用されるようになっています。

JWTの利用シーン

JWTは、ステートレスでドメイン間対応の認証方式として、多くのwebアプリケーションでJWTが活用されています。次は、JWTの主な利用シーンを紹介します。

API認証では、クライアントからアクセストークンとしてJWTを送信することで、APIサーバー側でユーザーの認証/認可を実現できます。

SPAでは、WebアプリケーションのフロントエンドとバックエンドでCORS対応の認証が必要になりますが、JWTならクロスドメインでも利用できます。

マイクロサービス間では、各サービスがユーザー情報を直接管理せずとも、JWTに含まれる情報を利用できるため有用です。

SSOでは異なるドメイン間でのシームレスな認証が必要で、ドメイン間でJWTを共有することで実現できます。

このように、様々な認証・認可のユースケースでJWTが活用されています。ステートレスでスケーラブルなのが特徴です。

Node.jsでJWT認証と認可の実装方法

Node.jsの公式サイトから、Node.jsでJWT認証と認可を行うために、次の手順に従って操作することができると思います。

JWTの生成

jsonwebtokenライブラリを使用してJWTを生成します。 まずは次のコマンドでライブラリをインストールします。

npm install jsonwebtoken

そして、次のようなJWTを生成します:

const jwt = require('jsonwebtoken');

const payload = { userId: 123, role: 'admin' };
const secretKey = 'your-secret-key';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });

JWTの検証

サーバー側はJWTを受け取る場合は、JWTの真実性が検証されます。次のコマンドでJWTの検証を行うことができます:

const jwt = require('jsonwebtoken');

const token = 'your-jwt-token';
const secretKey = 'your-secret-key';
try {
  const decoded = jwt.verify(token, secretKey);
  console.log(decoded);
} catch (error) {
  console.error('JWT verification failed');
}

Middlewareを作成

Express.jsフレームワークの場合、JWT検証のmiddlewareを作成して、ルート(routes)を保護できます:

const jwt = require('jsonwebtoken');
const secretKey = 'your-secret-key';
function authenticateToken(req, res, next) {
  const token = req.header('Authorization');
  if (!token) return res.status(401).send('Access denied');
try {
    const decoded = jwt.verify(token, secretKey);
    req.user = decoded;
    next();
  } catch (error) {
    res.status(403).send('Invalid token');
  }
}

実用例

次は、JWT認証と認証を行うためのExpress.jsのアプリのサンプルになります:

// Import libraries
const express = require('express');
const jwt = require('jsonwebtoken');
// App setup
const app = express();
const secretKey = 'your-secret-key';
// Login route, generate JWT
app.post('/login', (req, res) => {
  // Authenticate credentials and create token
  const token = jwt.sign({ username: 'user' }, secretKey);   
  res.json({ token });
});
// Protected route, verify JWT
app.get('/protected', authenticateToken, (req, res) => {
  res.json({ message: 'Protected data' });
});
// JWT verification middleware
function authenticateToken(req, res, next) {
  // Verify JWT and decode payload
  const decoded = jwt.verify(token, secretKey);  
  req.user = decoded;
  next(); 
}
app.listen(3000);
button

Apidog:JWT認証を数クリックで行う

もしより簡単にJWT認証を行う必要がある場合、Apidogという非常に使いやすいAPI管理ツールがおすすめです。Apidogは、JWT認証を完璧に対応できるので、リクエストをサーバー側に送信する前に、直感的な操作でJWT認証を行えるAPIクライアントツールです。使い方は非常に簡単です:

apidogでJWT認証を

上記の画面で示されているように、Apidogを開き、APIリクエストの送信画面で「Auth」タブに切り替えると、タイプを「JWT」に指定することができます。そして、同じ画面でJWTの詳細情報を記入して、「送信」ボタンをクリックすれば、簡単にJWT認証を行うことができます。

また、APIをより効率的に管理したり、テストしたりする必要がある場合は、Apidogはそれをサポートできます。

まとめ

Node.jsでのアプリケーション開発において、JWT(JSON Web Token)を用いた認証はセキュリティ確保のために非常に重要な技術です。しかしながら、JWT自体の仕組みや、コードベースでの実装方法は複雑で、開発者にとっての導入障壁が高いという課題がありました。

この問題を解決するために、近年GUIベースのAPI開発プラットフォーム「Apidog」が注目されています。Apidogを利用することで、いくつかのクリック操作だけで直感的にJWTの発行や検証を試すことができます。

button

Explore more

MindsDB: あらゆるITユーザーのための万能MCPサーバー

MindsDB: あらゆるITユーザーのための万能MCPサーバー

MindsDBは、200以上のデータソースへの接続を容易にし、AIアプリの構築やインサイトの探索をプロのように実現します。さらなるデータソースの接続や、APIdogでのAPIドキュメント化をお試しください。

26 5月 2025

IT初心者必見!Google Drive MCPサーバーでAIを強化する方法

IT初心者必見!Google Drive MCPサーバーでAIを強化する方法

MCPサーバーは、AIをソフトウェア開発でより効果的なパートナーにし、生産性を向上させます。Google Drive MCPサーバーはAIのデータ統合を簡素化し、API開発ではApidog MCPサーバーが重要な役割を果たします。

22 5月 2025

2025最新:Node.jsでWebSocketを利用する

2025最新:Node.jsでWebSocketを利用する

WebSocketはブラウザとサーバー間のリアルタイムな双方向通信を可能にする技術です。Node.jsでwsモジュールを使って、WebSocket通信を簡単に実現することができます。本文では、Node.jsでWebSocketを利用する方法を紹介します。必要な方はぜひこの記事の内容を参照してください。

12 5月 2025

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる