0Pricing
Node.js Backend Development Bootcamp · レッスン

ステートレス認証のためのJWT

JSON Web Token(JWT)を使ったステートレス認証を実装し、ユーザーセッションを安全に管理します。

「ステートレス認証のためのJWT」はCoddyKit上の無料Node.js Backend Development Bootcampレッスンです。 これはレッスン3/6です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはNode.js Backend Development Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Node.js Backend Development Bootcampコースには全6レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

What is JWT?

In this lesson, we'll dive into JSON Web Tokens (JWTs). They are a compact, URL-safe means of representing claims to be transferred between two parties.

JWTs are crucial for stateless authentication. This means the server doesn't need to store session information. Instead, all necessary user data is embedded directly within the token itself.

JWT Structure: Three Parts

A JWT is made of three distinct parts, separated by dots (.):

  • Header: Information about the token itself.
  • Payload: The actual data (claims) you want to transmit.
  • Signature: Used to verify the token hasn't been tampered with.

It looks like this: xxxxx.yyyyy.zzzzz

The Header & Payload Deep Dive

The Header usually contains two parts:

  • alg: The algorithm used for signing (e.g., HMAC SHA256 or RSA).
  • typ: The type of token, which is usually 'JWT'.

The Payload contains the 'claims' – statements about an entity (typically, the user) and additional data. Common claims include:

  • sub (subject): The user ID.
  • iss (issuer): Who issued the token.
  • exp (expiration time): When the token expires.

The Signature Explained

The Signature is what makes JWTs secure. It's created by taking the encoded Header, the encoded Payload, a secret key, and the algorithm specified in the header, then signing them.

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

If someone tries to alter the header or payload, the signature verification will fail, indicating the token is invalid or tampered with.

JWT Workflow Overview

Here's how JWTs typically work in an authentication flow:

  1. User logs in with credentials.
  2. Server verifies credentials and creates a JWT.
  3. Server sends the JWT back to the client.
  4. Client stores the JWT (e.g., in local storage or a cookie).
  5. For subsequent requests, the client sends the JWT (usually in the Authorization header).
  6. Server verifies the JWT's signature and expiration before processing the request.

Creating a JWT in Node.js

We'll use the popular jsonwebtoken library. First, install it with npm install jsonwebtoken.

This example shows how to sign (create) a new JWT with a payload and an expiration time. Remember to keep your secretKey very secure!

const jwt = require('jsonwebtoken');

const payload = {
  userId: 'user123',
  username: 'coddykit'
};

// A strong, secret key. Keep this secure in a .env file!
const secretKey = 'your_super_secret_key_12345'; 

const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });

console.log('Generated JWT:');
console.log(token);

Validating a JWT in Node.js

Once you receive a JWT from the client, your server needs to verify its authenticity. The jwt.verify() method checks the signature and expiration.

If the token is valid, it returns the decoded payload. If not, it throws an error (e.g., TokenExpiredError or JsonWebTokenError).

const jwt = require('jsonwebtoken');

// Replace with a valid token generated from the previous step
const tokenToVerify = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ1c2VyMTIzIiwidXNlcm5hbWUiOiJjb2RkeWtpdCIsImlhdCI6MTY3ODg4NjQwMCwiZXhwIjoxNjc4ODkwMDAwfQ.SOME_RANDOM_SIGNATURE';

const secretKey = 'your_super_secret_key_12345'; 

try {
  const decoded = jwt.verify(tokenToVerify, secretKey);
  console.log('Token is valid!');
  console.log('Decoded Payload:', decoded);
} catch (err) {
  console.log('Token verification failed:');
  console.log(err.message);
}

Storing JWTs Securely

Where you store JWTs on the client-side is critical for security:

  • Local Storage / Session Storage: Easy to use, but vulnerable to Cross-Site Scripting (XSS) attacks if malicious JavaScript can access it.
  • HttpOnly Cookies: More secure against XSS because JavaScript cannot access them. However, they are vulnerable to Cross-Site Request Forgery (CSRF) if not properly protected.

Often, a combination of strategies or careful CSRF token implementation is used.

Access vs. Refresh Tokens

For enhanced security, many applications use two types of tokens:

  • Access Token: Short-lived (e.g., 15 minutes to 1 hour), used for direct API calls. If stolen, its utility is limited.
  • Refresh Token: Long-lived, stored securely (e.g., HttpOnly cookie). Used to obtain a new access token once the current one expires, without requiring the user to log in again.

This pattern minimizes the risk of long-lived access tokens being compromised.

JWT Component Check

Let's quickly test your understanding of JWTs!

JWTs in Summary

You've successfully learned about JSON Web Tokens! We covered:

  • What JWTs are and their role in stateless authentication.
  • The three parts: Header, Payload, and Signature.
  • How to create and verify JWTs using Node.js.
  • Important considerations for client-side storage and the use of refresh tokens.

JWTs are a powerful tool for building secure and scalable authentication systems in your Node.js applications!

よくある質問

「ステートレス認証のためのJWT」レッスンは無料ですか?

はい。「ステートレス認証のためのJWT」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Node.js Backend Development Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Node.js Backend Development Bootcampコースには全6レッスンが含まれています。

「ステートレス認証のためのJWT」で何を学びますか?

JSON Web Token(JWT)を使ったステートレス認証を実装し、ユーザーセッションを安全に管理します。 ブラウザで直接実行するハンズオンコードでNode.js Backend Development Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Node.js Backend Development Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのNode.js Backend Development Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/6です。

「ステートレス認証のためのJWT」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このNode.js Backend Development Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのNode.js Backend Development Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ユーザー登録とログイン
  2. JWTトークンの生成と検証
  3. ステートレス認証のためのJWT
  4. OAuth2パスワードフローの統合
  5. ロールベースアクセス制御
  6. ロールベースアクセス制御(RBAC)
← Node.js Backend Development Bootcampに戻る