# authia
WebAssemblyを使用した高性能なEd25519 JWT検証ライブラリ
## 特徴
- 🚀 Rust + WebAssemblyによる高速なEd25519 JWT検証
- 🔒 セキュアな設計 - アルゴリズムはEd25519に固定
- 🌐 ユニバーサルランタイム対応(Node.js、ブラウザ、Cloudflare Workers)
- 📦 ランタイム依存なし
- 🎯 TypeScript型定義を同梱
- ⚡ 自動的なWasm初期化
## 📊 ベンチマーク
Node.jsの標準ライブラリである`jose`と比較して、**authia**はRustの効率性と積極的なキャッシングにより、より高速な実行と低いオーバーヘッドを提供します。
| **authia (WASM)** | **0.29ms** | **0.26ms** | **0.48ms** | **1.11x** |
| jose (JS Native) | 0.32ms | 0.29ms | 0.48ms | 1.00x |
_Node.js v24環境で2,000回の反復テスト。検証にはEd25519署名チェック、クレーム検証(iss、aud、exp、iat)、ペイロードデコードが含まれます。_
## インストール
```bash
npm install authia
```
## 使い方
ライブラリは環境(Node.jsまたはBundler/Workers)を自動検出し、WebAssemblyの読み込みを処理します。
### アクセストークンの検証
```typescript
import { verifyAccessToken } from "authia";
try {
// Cloudflare Workers: 初回呼び出しは非同期
// Node.js: 同期的に検証
const payload = await verifyAccessToken(token, {
publicKeyJwk: process.env.JWT_PUBLIC_KEY,
audience: "kapock-app",
issuer: "https://auth.kapock.com",
});
console.log(`ユーザーID: ${payload.sub}, メール: ${payload.email}`);
} catch (error) {
console.error("トークン検証失敗:", error);
}
```
### リフレッシュトークンの検証
```typescript
import { verifyRefreshToken } from "authia";
const payload = await verifyRefreshToken(token, {
publicKeyJwk: process.env.JWT_PUBLIC_KEY,
audience: "kapock-app",
issuer: "https://auth.kapock.com",
});
console.log(`JTI: ${payload.jti}`);
```
## ランタイムの動作
### Node.js
検証は**同期的**です。WebAssemblyモジュールは起動時に`fs.readFileSync`を使用して読み込まれます。
### Cloudflare Workers / バンドラー
検証は**非同期**(Promiseを返す)で、非同期WebAssemblyコンパイルを可能にします。Wasmは最初の関数呼び出し時に自動的に初期化されます。
## API
詳細は[APIドキュメント](./docs/api.md)を参照してください。
## ライセンス
MIT