跳至內容

JWT 驗證輔助工具

此輔助工具提供編碼、解碼、簽署和驗證 JSON Web Tokens (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: AlgorithmTypes

用於 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: AlgorithmTypes

用於 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 和 MGF1 與 SHA-256 的 RSASSA-PSS
  • PS384:使用 SHA-386 和 MGF1 與 SHA-386 的 RSASSA-PSS
  • PS512:使用 SHA-512 和 MGF1 與 SHA-512 的 RSASSA-PSS
  • ES256:使用 P-256 和 SHA-256 的 ECDSA
  • ES384:使用 P-384 和 SHA-384 的 ECDSA
  • ES512:使用 P-521 和 SHA-512 的 ECDSA
  • EdDSA:使用 Ed25519 的 EdDSA

以 MIT 授權發佈。