JWTの基本

ウェブアプリケーションやモバイルアプリケーションの開発において、セキュリティは非常に重要な要素です。

ユーザーの認証や権限管理を行う際に、JWT(JSON Web Token)はよく使われる仕組みの一つです。

本記事では、JWTの基本的な概念と使い方について初心者向けに解説します。



フロントエンドエンジニアロードマップ一覧はこちら



JWTとは?

JWTは、JSON形式で情報を安全にやり取りするためのオープンな標準(RFC 7519)です。

主に認証や情報のやり取りに使用され、特にウェブ開発においてトークンベースの認証に広く利用されています。


JWTは3つのセクションから構成されています。


Header(ヘッダー):

トークンの種類や使用するアルゴリズムなどのメタデータが格納されます。

ヘッダーはBase64でエンコードされます。

{
  "alg": "HS256",
  "typ": "JWT"
}


Payload(ペイロード):

実際に運ぶデータが格納されます。

ユーザーIDや権限、発行日時など、任意のデータが含まれます。

ペイロードもBase64でエンコードされます。

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}


Signature(シグネチャ):

ヘッダーとペイロード、さらに秘密鍵を使用して生成される署名です。

シグネチャにより、トークンが改ざんされていないことが確認できます。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)


最終的に、これらのセクションがピリオド(.)で結合されてJWTが構成されます。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


JWTの利用シーン

JWTは主に以下のようなシーンで利用されます。

  1. 認証:
  2. ユーザーがログインした際に、サーバーがJWTを発行し、それをユーザーに返します。ユーザーはこのJWTを保持し、サーバーへの各リクエストに付与して認証を行います。
  3. 情報の安全なやり取り:
  4. ウェブアプリケーション内で情報を安全にやり取りするためにも使用されます。例えば、クライアントとサーバー間で情報をやり取りする場合、JWTを使ってデータを安全に梱包し送信することができます。


JWTの基本的な使い方

1. ライブラリの導入:

まず最初に、JWTを生成・検証するためのライブラリを導入します。

例えば、Node.jsでの場合、jsonwebtokenパッケージが利用できます。

npm install jsonwebtoken


2. JWTの生成:

サーバーでユーザーがログインした際に、JWTを生成してユーザーに返します。

const jwt = require('jsonwebtoken');

const secretKey = 'your_secret_key';

const payload = {
  userId: '123456',
  username: 'john_doe'
};

const options = {
  expiresIn: '1h'
};

const token = jwt.sign(payload, secretKey, options);

console.log(token);


3. JWTの検証:

クライアントがリクエストを送信する際に、JWTをサーバーに添付し、サーバーでそのJWTが有効か検証します。

const jwt = require('jsonwebtoken');

const secretKey = 'your_secret_key';
const tokenFromClient = '...'; // クライアントからのトークン

try {
  const decodedToken = jwt.verify(tokenFromClient, secretKey);
  console.log(decodedToken);
} catch (error) {
  console.error('Invalid token');
}

このように、verifyメソッドを使用してJWTを検証します。もし検証に失敗した場合は例外が発生します。


JWTのセキュリティ注意点

  1. 秘密鍵の管理:
  2. JWTの署名は秘密鍵を使用するため、秘密鍵の安全な管理が重要です。秘密鍵が漏洩すると、JWTが改ざんされる可能性があります。
  3. 有効期限の設定:
  4. JWTには有効期限を設定できますが、あまりにも長い期間を指定すると、トークンが漏洩した際の被害が大きくなります。適切な有効期限を設定しましょう。
  5. SSL/TLSの使用:
  6. JWTを使用する際には、通信をSSL/TLSで暗号化することが推奨されます。これによりトークンの盗聴が防げます。


まとめ

JWTはセキュアな認証や情報のやり取りに有用な仕組みです。

そのシンプルで柔軟な性質から、多くのウェブアプリケーションで採用されています。

ただし、セキュリティ上の注意点を理解し、適切に使用することが重要です。

JWTを利用することで、セキュアでスマートな認証システムを構築できます。



フロントエンドエンジニアロードマップ一覧はこちら