claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialsecurity

🔐auth0-fastify

プラグイン
auth0
ライセンス
Apache-2.0

説明

次のような場合に使用: Fastifyウェブアプリケーションにセッションベースのログイン、ログアウト、または保護されたルートを追加する場合。 `@auth0/auth0-fastify` を統合します — ユーザーが「Fastifyアプリにログインを追加して」と言った場合にも使用してください。 BearerトークンをバリデートするFastify APIの場合は、代わりに `auth0-fastify-api` を使用してください。

原文を表示

Use when adding session-based login, logout, or protected routes to a Fastify web application. Integrates @auth0/auth0-fastify — use even if the user says "add login to my Fastify app". For Fastify APIs validating Bearer tokens, use auth0-fastify-api instead.

ユースケース

  • Fastifyアプリにセッションベースのログインを追加する
  • Fastifyアプリにログアウト機能を追加する
  • Fastifyで保護されたルートを実装する

本文(日本語訳)

Auth0 Fastify Integration

@auth0/auth0-fastify を使用して、Fastify Webアプリケーションに認証機能を追加します。


前提条件

  • Fastifyアプリケーション(v5.x 以降)
  • Node.js 20 LTS 以降
  • Auth0アカウントおよびアプリケーションの設定済み環境
  • Auth0をまだセットアップしていない場合は、先に auth0-quickstart skillを使用してください

使用しない場合

  • シングルページアプリケーション — クライアントサイド認証には auth0-reactauth0-vue、または auth0-angular を使用
  • Next.jsアプリケーション — クライアント・サーバー両方を扱う auth0-nextjs skillを使用
  • モバイルアプリケーション — React Native / Expo には auth0-react-native を使用
  • ステートレスAPI — セッションを使わないJWT検証には、代わりに @auth0/auth0-fastify-api を使用
  • マイクロサービス — サービス間認証にはJWT検証を使用

クイックスタート手順

1. SDKのインストール

npm install @auth0/auth0-fastify fastify @fastify/view ejs dotenv

2. 環境設定

.env を作成:

AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
SESSION_SECRET=<openssl-rand-hex-64>
APP_BASE_URL=http://localhost:3000

シークレットの生成: openssl rand -hex 64

3. Auth Pluginの設定

Fastifyサーバーを作成します(server.js):

import 'dotenv/config';
import Fastify from 'fastify';
import fastifyAuth0 from '@auth0/auth0-fastify';
import fastifyView from '@fastify/view';
import ejs from 'ejs';

const fastify = Fastify({ logger: true });

// ビューエンジンを登録
await fastify.register(fastifyView, {
  engine: { ejs },
  root: './views',
});

// Auth0 pluginを設定
await fastify.register(fastifyAuth0, {
  domain: process.env.AUTH0_DOMAIN,
  clientId: process.env.AUTH0_CLIENT_ID,
  clientSecret: process.env.AUTH0_CLIENT_SECRET,
  appBaseUrl: process.env.APP_BASE_URL,
  sessionSecret: process.env.SESSION_SECRET,
});

fastify.listen({ port: 3000 });

上記の設定により、以下のエンドポイントが自動的に作成されます:

  • /auth/login — ログインエンドポイント
  • /auth/logout — ログアウトエンドポイント
  • /auth/callback — OAuthコールバック

4. ルートの追加

// パブリックルート
fastify.get('/', async (request, reply) => {
  const session = await fastify.auth0Client.getSession({ request, reply });
  return reply.view('views/home.ejs', {
    isAuthenticated: !!session,
  });
});

// 保護されたルート
fastify.get('/profile', {
  preHandler: async (request, reply) => {
    const session = await fastify.auth0Client.getSession({ request, reply });
    if (!session) {
      return reply.redirect('/auth/login');
    }
  }
}, async (request, reply) => {
  const user = await fastify.auth0Client.getUser({ request, reply });
  return reply.view('views/profile.ejs', { user });
});

5. 認証のテスト

サーバーを起動します:

node server.js

http://localhost:3000 にアクセスし、ログインフローを確認してください。


よくある間違い

間違い 対処法
Auth0 DashboardへのコールバックURLの追加忘れ Allowed Callback URLs に /auth/callback パスを追加(例: http://localhost:3000/auth/callback
SESSION_SECRETが未設定または強度不足 openssl rand -hex 64 で安全な64文字のシークレットを生成し、.envに保存する
Auth0でアプリをSPAタイプとして作成してしまった サーバーサイド認証には「Regular Web Application」タイプを使用する必要がある
セッションシークレットをコードにハードコード 常に環境変数を使用し、シークレットを直接コードに埋め込まない
本番環境で appBaseUrl が誤っている APP_BASE_URL を本番ドメインに合わせて更新する
fastify.register を await していない Fastify v4以降ではplugin登録時にawaitが必要

関連Skill

  • auth0-quickstart — Auth0の基本セットアップ
  • auth0-migration — 別の認証プロバイダーからの移行
  • auth0-mfa — 多要素認証(MFA)の追加
  • auth0-cli — ターミナルからのAuth0リソース管理

クイックリファレンス

Plugin オプション:

  • domain — Auth0テナントドメイン(必須)
  • clientId — Auth0クライアントID(必須)
  • clientSecret — Auth0クライアントシークレット(必須)
  • appBaseUrl — アプリケーションURL(必須)
  • sessionSecret — セッション暗号化シークレット(必須、64文字以上)
  • audience — APIオーディエンス(任意、API呼び出し時に使用)

クライアントメソッド:

  • fastify.auth0Client.getSession({ request, reply }) — ユーザーセッションを取得
  • fastify.auth0Client.getUser({ request, reply }) — ユーザープロフィールを取得
  • fastify.auth0Client.getAccessToken({ request, reply }) — アクセストークンを取得
  • fastify.auth0Client.logout(options, { request, reply }) — ユーザーをログアウト

主なユースケース:

  • 保護されたルート → preHandler でセッションを確認(手順4を参照)
  • 認証状態の確認 → !!session
  • ユーザー情報の取得 → getUser({ request, reply })
  • APIの呼び出し → getAccessToken({ request, reply })

参考リンク

原文(English)を表示

Auth0 Fastify Integration

Add authentication to Fastify web applications using @auth0/auth0-fastify.


Prerequisites

  • Fastify application (v5.x or newer)
  • Node.js 20 LTS or newer
  • Auth0 account and application configured
  • If you don't have Auth0 set up yet, use the auth0-quickstart skill first

When NOT to Use

  • Single Page Applications - Use auth0-react, auth0-vue, or auth0-angular for client-side auth
  • Next.js applications - Use auth0-nextjs skill which handles both client and server
  • Mobile applications - Use auth0-react-native for React Native/Expo
  • Stateless APIs - Use @auth0/auth0-fastify-api instead for JWT validation without sessions
  • Microservices - Use JWT validation for service-to-service auth

Quick Start Workflow

1. Install SDK

npm install @auth0/auth0-fastify fastify @fastify/view ejs dotenv

2. Configure Environment

Create .env:

AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
SESSION_SECRET=<openssl-rand-hex-64>
APP_BASE_URL=http://localhost:3000

Generate secret: openssl rand -hex 64

3. Configure Auth Plugin

Create your Fastify server (server.js):

import 'dotenv/config';
import Fastify from 'fastify';
import fastifyAuth0 from '@auth0/auth0-fastify';
import fastifyView from '@fastify/view';
import ejs from 'ejs';

const fastify = Fastify({ logger: true });

// Register view engine
await fastify.register(fastifyView, {
  engine: { ejs },
  root: './views',
});

// Configure Auth0 plugin
await fastify.register(fastifyAuth0, {
  domain: process.env.AUTH0_DOMAIN,
  clientId: process.env.AUTH0_CLIENT_ID,
  clientSecret: process.env.AUTH0_CLIENT_SECRET,
  appBaseUrl: process.env.APP_BASE_URL,
  sessionSecret: process.env.SESSION_SECRET,
});

fastify.listen({ port: 3000 });

This automatically creates:

  • /auth/login - Login endpoint
  • /auth/logout - Logout endpoint
  • /auth/callback - OAuth callback

4. Add Routes

// Public route
fastify.get('/', async (request, reply) => {
  const session = await fastify.auth0Client.getSession({ request, reply });
  return reply.view('views/home.ejs', {
    isAuthenticated: !!session,
  });
});

// Protected route
fastify.get('/profile', {
  preHandler: async (request, reply) => {
    const session = await fastify.auth0Client.getSession({ request, reply });
    if (!session) {
      return reply.redirect('/auth/login');
    }
  }
}, async (request, reply) => {
  const user = await fastify.auth0Client.getUser({ request, reply });
  return reply.view('views/profile.ejs', { user });
});

5. Test Authentication

Start your server:

node server.js

Visit http://localhost:3000 and test the login flow.


Common Mistakes

Mistake Fix
Forgot to add callback URL in Auth0 Dashboard Add /auth/callback path to Allowed Callback URLs (e.g., http://localhost:3000/auth/callback)
Missing or weak SESSION_SECRET Generate secure 64-char secret with openssl rand -hex 64 and store in .env
App created as SPA type in Auth0 Must be Regular Web Application type for server-side auth
Session secret exposed in code Always use environment variables, never hardcode secrets
Wrong appBaseUrl for production Update APP_BASE_URL to match your production domain
Not awaiting fastify.register Fastify v4+ requires awaiting plugin registration

Related Skills

  • auth0-quickstart - Basic Auth0 setup
  • auth0-migration - Migrate from another auth provider
  • auth0-mfa - Add Multi-Factor Authentication
  • auth0-cli - Manage Auth0 resources from the terminal

Quick Reference

Plugin Options:

  • domain - Auth0 tenant domain (required)
  • clientId - Auth0 client ID (required)
  • clientSecret - Auth0 client secret (required)
  • appBaseUrl - Application URL (required)
  • sessionSecret - Session encryption secret (required, min 64 chars)
  • audience - API audience (optional, for calling APIs)

Client Methods:

  • fastify.auth0Client.getSession({ request, reply }) - Get user session
  • fastify.auth0Client.getUser({ request, reply }) - Get user profile
  • fastify.auth0Client.getAccessToken({ request, reply }) - Get access token
  • fastify.auth0Client.logout(options, { request, reply }) - Logout user

Common Use Cases:

  • Protected routes → Use preHandler to check session (see Step 4)
  • Check auth status → !!session
  • Get user info → getUser({ request, reply })
  • Call APIs → getAccessToken({ request, reply })

References

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。