mcpField
A
auth0-express

auth0-express

github.com/auth0セキュリティ55816 回インストール1 日前に更新
リポジトリ

auth0-express について

express-openid-connect を使って、Express.js のサーバーアプリに Auth0 認証を追加するガイドです。セッション認証、保護されたルート、外部 API 用のアクセストークン設定を扱います。

主な機能

  1. 01express-openid-connect ミドルウェアの設定
  2. 02ログイン・ログアウト・コールバックの作成
  3. 03ミドルウェアによるルート保護
  4. 04外部 API 用トークンの設定

活用シーン

  1. 01Express.js サイトへの Auth0 ログイン追加
  2. 02特定ルートへのアクセス制限
  3. 03アクセストークンで下流 API を呼び出す

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/auth0/agent-skills --skill auth0-express

インストール後、Claude Code で/auth0-expressを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
api.md
integration.md
setup.md

詳細

Auth0 Express 統合

express-openid-connect を使用して Express.js Web アプリケーションに認証を追加します。


前提条件

  • Express.js アプリケーション
  • Auth0 アカウントと設定済みのアプリケーション
  • Auth0 のセットアップがまだの場合は、まず auth0-quickstart スキルを使用してください

使用しないケース

  • シングルページアプリケーション - クライアント側の認証には auth0-react、auth0-vue、または auth0-angular を使用してください
  • Next.js アプリケーション - クライアント側とサーバー側の両方を処理する auth0-nextjs スキルを使用してください
  • モバイルアプリケーション - React Native/Expo には auth0-react-native を使用してください
  • ステートレス API - セッションベースの認証ではなく、JWT 検証ミドルウェアを使用してください
  • マイクロサービス - サービス間認証には JWT 検証を使用してください

クイックスタートのワークフロー

1. SDK をインストールする
npm install express-openid-connect dotenv
2. 環境を設定する

Auth0 CLI を使った自動セットアップについては、 完全なスクリプトを記載したセットアップガイドを参照してください。

手動でセットアップする場合:

.env を作成します。

SECRET=<openssl-rand-hex-32>
BASE_URL=http://localhost:3000
CLIENT_ID=your-client-id
CLIENT_SECRET=your-client-secret
ISSUER_BASE_URL=https://your-tenant.auth0.com
AUDIENCE=https://your-api-identifier  # only required if calling external APIs (Step 3a)

シークレットを生成します:openssl rand -hex 32

3. 認証ミドルウェアを設定する

Express アプリ(app.js または index.js)を更新します。

require('dotenv').config();
const express = require('express');
const { auth, requiresAuth } = require('express-openid-connect');

const app = express();

// Configure Auth0 middleware
app.use(auth({
  authRequired: false,  // Don't require auth for all routes
  auth0Logout: true,    // Enable logout endpoint
  secret: process.env.SECRET,
  baseURL: process.env.BASE_URL,
  clientID: process.env.CLIENT_ID,
  issuerBaseURL: process.env.ISSUER_BASE_URL,
  clientSecret: process.env.CLIENT_SECRET
}));

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

外部 API を呼び出しますか? 下流の API 用にアクセストークンが必要な場合は、authorizationParams を追加する必要があります。詳しくは以下のステップ 3a を参照してください。

これにより、次のエンドポイントが自動的に作成されます。

  • /login - ログインエンドポイント
  • /logout - ログアウトエンドポイント
  • /callback - OAuth コールバック
3a. API アクセス用のミドルウェアを設定する(外部 API を呼び出す場合)

外部 API 用のアクセストークンが必要な場合、audience は必ず authorizationParams の中に指定してください。最上位に指定すると無視され、アクセストークンは発行されません。

// SDK auto-loads SECRET, BASE_URL, CLIENT_ID, ISSUER_BASE_URL, CLIENT_SECRET from env vars
app.use(auth({
  authRequired: false,
  auth0Logout: true,
  authorizationParams: {            // ← required for access tokens
    response_type: 'code',          // ← required: authorization code flow
    audience: process.env.AUDIENCE, // ← API identifier (never top-level)
    scope: 'openid profile email'
  }
}));

続いて、ルートでトークンにアクセスします。

app.get('/api-call', requiresAuth(), async (req, res) => {
  const { access_token } = req.oidc.accessToken; // object, not a string
  const response = await fetch('https://your-api.com/data', {
    headers: { Authorization: `Bearer ${access_token}` }
  });
  res.json(await response.json());
});
4. ルートを追加する
// Public route
app.get('/', (req, res) => {
  res.send(req.oidc.isAuthenticated() ? 'Logged in' : 'Logged out');
});

// Protected route
app.get('/profile', requiresAuth(), (req, res) => {
  res.send(`
    <h1>Profile</h1>
    <p>Name: ${req.oidc.user.name}</p>
    <p>Email: ${req.oidc.user.email}</p>
    <pre>${JSON.stringify(req.oidc.user, null, 2)}</pre>
    <a href="/logout">Logout</a>
  `);
});

// Login/logout links
app.get('/', (req, res) => {
  res.send(`
    ${req.oidc.isAuthenticated() ? `
      <p>Welcome, ${req.oidc.user.name}!</p>
      <a href="/profile">Profile</a>
      <a href="/logout">Logout</a>
    ` : `
      <a href="/login">Login</a>
    `}
  `);
});
5. 認証をテストする

サーバーを起動します。

node app.js

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


詳細なドキュメント

  • セットアップガイド - 自動セットアップスクリプト、環境設定、Auth0 CLI の使用方法
  • 統合ガイド - 保護されたルート、セッション、API 統合、エラー処理
  • API リファレンス - ミドルウェア API 全般、設定オプション、リクエストのプロパティ

よくある間違い

間違い修正方法
Auth0 Dashboard にコールバック URL を追加し忘れるAllowed Callback URLs に /callback パスを追加します(例:http://localhost:3000/callback)
SECRET がない、または弱いopenssl rand -hex 32 で安全なシークレットを生成し、.env の SECRET に設定します
authRequired: true を全体に設定するfalse に設定し、特定のルートで requiresAuth() ミドルウェアを使用します
Auth0 でアプリを SPA タイプとして作成するサーバー側認証には Regular Web Application タイプが必要です
セッションシークレットをコード内に公開する必ず環境変数を使用し、シークレットをハードコードしないでください
本番環境の baseURL が誤っているBASE_URL を本番環境のドメインに合わせて更新します
ログアウト時の returnTo を処理しないAuth0 Dashboard の Allowed Logout URLs にドメインを追加します
audience を最上位の設定キーとして指定するaudience を response_type: 'code' および scope とともに authorizationParams の中へ移動します。最上位の audience は無視され、アクセストークンは発行されません
req.oidc.accessToken を文字列として使用するこれはオブジェクトです。const { access_token } = req.oidc.accessToken で分割代入します

関連スキル

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

クイックリファレンス

ミドルウェアのオプション:

  • authRequired - すべてのルートで認証を必須にします(デフォルト:false)
  • auth0Logout - /logout エンドポイントを有効にします(デフォルト:false)
  • secret - セッションシークレット(必須)
  • baseURL - アプリケーションの URL(必須)
  • clientID - Auth0 クライアント ID(必須)
  • issuerBaseURL - Auth0 テナントの URL(必須)

リクエストのプロパティ:

  • req.oidc.isAuthenticated() - ユーザーがログインしているか確認します
  • req.oidc.user - ユーザープロフィールオブジェクト
  • req.oidc.accessToken - アクセストークンオブジェクト({ access_token, token_type, expires_in })。expires_in は残り秒数です。const { access_token } = req.oidc.accessToken のように分割代入できます。isExpired() と refresh() のメソッドも利用できます。audience と response_type: 'code' を含む authorizationParams が設定されている場合にのみ値が格納されます
  • req.oidc.idToken - ID トークン
  • req.oidc.refreshToken - リフレッシュトークン

一般的なユースケース:

  • 保護されたルート → requiresAuth() ミドルウェアを使用します(ステップ 4 を参照)
  • 認証状態の確認 → req.oidc.isAuthenticated()
  • ユーザー情報の取得 → req.oidc.user
  • API の呼び出し → 統合ガイド

参考資料

コメント