コンテンツにスキップ

JWT 認証ヘルパー

このヘルパーは、JSON Web トークン (JWT) のエンコード、デコード、署名、検証を行う関数を提供します。 JWT は、Web アプリケーションの認証と認可目的で一般的に使用されます。 このヘルパーは、さまざまな暗号化アルゴリズムをサポートした堅牢な JWT 機能を提供します。

インポート

このヘルパーを使用するには、次のようにインポートできます。

ts
import { decode, sign, verify } from 'hono/jwt'

情報

JWT ミドルウェアhono/jwt から jwt 関数をインポートします。

sign()

この関数は、ペイロードをエンコードして指定したアルゴリズムとシークレットを使用して署名することで、JWT トークンを生成します。

ts
sign(
  payload: unknown,
  secret: string,
  alg?: 'HS256';

): Promise<string>;

ts
import { sign } from 'hono/jwt'

const payload = {
  sub: 'user123',
  role: 'admin',
  exp: Math.floor(Date.now() / 1000) + 60 * 5, // Token expires in 5 minutes
}
const secret = 'mySecretKey'
const token = await sign(payload, secret)

オプション


必須 payload: unknown

署名される JWT ペイロード。 ペイロードの検証 のように、他のクレームを含めることができます。

必須 secret: string

JWT の検証または署名に使用される秘密キー。

任意 alg: アルゴリズムタイプ

JWT 署名または検証に使用されるアルゴリズム。デフォルトは HS256 です。

verify()

この関数は、JWT トークンが本物であり、有効であるかを確認します。トークンが改変されていないことを確認し、ペイロード検証を追加した場合にのみ有効性を確認します。

ts
verify(
  token: string,
  secret: string,
  alg?: 'HS256';
): Promise<any>;

ts
import { verify } from 'hono/jwt'

const tokenToVerify = 'token'
const secretKey = 'mySecretKey'

const decodedPayload = await verify(tokenToVerify, secretKey)
console.log(decodedPayload)

オプション


必須 token: string

検証対象の JWT トークン。

必須 secret: string

JWT の検証または署名に使用される秘密キー。

任意 alg: アルゴリズムタイプ

JWT 署名または検証に使用されるアルゴリズム。デフォルトは HS256 です。

decode()

この関数は、署名検証を実行せずに JWT トークンをデコードします。トークンからヘッダーとペイロードを抽出して返します。

ts
decode(token: string): { header: any; payload: any };

ts
import { decode } from 'hono/jwt'

// Decode the JWT token
const tokenToDecode =
  'eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAidXNlcjEyMyIsICJyb2xlIjogImFkbWluIn0.JxUwx6Ua1B0D1B0FtCrj72ok5cm1Pkmr_hL82sd7ELA'

const { header, payload } = decode(tokenToDecode)

console.log('Decoded Header:', header)
console.log('Decoded Payload:', payload)

オプション


必須 token: string

デコード対象の JWT トークン。

`decode` 関数は、検証を実行せずに JWT トークンのヘッダーとペイロードを検査できます。これは、デバッグまたは JWT トークンから情報を抽出する場合に便利です。

ペイロード検証

JWT トークンを検証すると、次のペイロード検証が実行されます。

  • exp: トークンの有効期限が切れていないことを確認します。
  • nbf: トークンが指定された時刻より前に使用されていないことを確認します。
  • iat: トークンが未来に発行されていないことを確認します。

検証中にこれらのチェックを実行する場合は、JWT ペイロードにこれらのフィールドがオブジェクトとして含まれていることを確認してください。

カスタムのエラータイプ

このモジュールは、JWT 関連のエラーを処理するためのカスタムエラータイプも定義します。

  • JwtAlgorithmNotImplemented: リクエストされた JWT アルゴリズムが実装されていません。
  • JwtTokenInvalid: JWT トークンが無効です。
  • JwtTokenNotBefore: トークンが有効な日付よりも前に使用されています。
  • JwtTokenExpired: トークンの有効期限が切れています。
  • JwtTokenIssuedAt: トークンの「iat」クレームが正しくありません。
  • JwtTokenSignatureMismatched: トークンに署名が一致しません。

サポートされているアルゴリズムタイプ

このモジュールは、次の JWT 暗号化アルゴリズムをサポートしています。

  • HS256: SHA-256 を使用する HMAC
  • HS384: SHA-384 を使用する HMAC
  • HS512: SHA-512 を使用する HMAC
  • RS256: SHA-256 を使用する RSASSA-PKCS1-v1_5
  • RS384: SHA-384 を使用する RSASSA-PKCS1-v1_5
  • RS512: SHA-512 を使用する RSASSA-PKCS1-v1_5
  • PS256: SHA-256 と SHA-256 を使用する MGF1 を使用する RSASSA-PSS
  • PS384: SHA-386 と SHA-386 を使用する MGF1 を使用する RSASSA-PSS
  • PS512: SHA-512 と SHA-512 を使用する MGF1 を使用する RSASSA-PSS
  • ES256: P-256 と SHA-256 を使用する ECDSA
  • ES384: P-384 と SHA-384 を使用する ECDSA
  • ES512: P-521 と SHA-512 を使用する ECDSA
  • EdDSA: Ed25519を使用したEdDSA

MITライセンスに基づいてリリースされています。