このQuickstartは現在ベータ版です。ぜひフィードバックをお寄せください!
前提条件:
- Node.js 20 LTS 以降
- npm 10+ または yarn 1.22+ または pnpm 8+
- 任意: jq - Auth0 CLI のセットアップ用、および安全なシークレットを生成するための openssl
- Hono プロジェクトでは Hono >= 3.x を使用してください (ピア依存関係)
はじめに
@auth0/auth0-hono を使って Hono アプリケーションを保護するための、最小限かつ推奨される方法を紹介します。内容は、リポジトリで推奨されているパターン、つまり環境変数ベースの設定、app.use(auth0(...)) ミドルウェア、そして必要なルートだけを保護するための requiresAuth() に沿っています。
1
新しいHonoアプリケーションを作成
create-hono ユーティリティを使って、新しい Hono アプリケーションを作成します。
nodejs テンプレートを選択2
依存関係をインストールする
Auth0のミドルウェアをインストールします。このクイックスタートでは、あるいは、依存関係を追加したくない場合は、node’s
.env ファイルから環境変数を読み込むために dotenv パッケージを使用します。dotenv をローカルにインストールするには:--env-file フラグを使ってプロセス起動時に env ファイルを読み込むこともできます。これにより、dotenv のインストールやインポートを省略できます。package.json の start スクリプトを次のように変更します。3
Auth0 アプリケーションを作成する
Auth0 テナントに Auth0 アプリケーション (Regular Web Application) を作成し、Domain、Client ID、Client Secret をプロジェクトの環境変数として設定します。
CLI コマンドを実行して Auth0 アプリを自動的に設定することも、Auth0 Dashboard から手動で設定することもできます。
- CLI
- Dashboard
プロジェクトのルートディレクトリで次のシェルコマンドを実行し、Auth0 アプリを作成して
.env ファイルを生成します。このコマンドにより、次の処理が行われます。
- 認証済みかどうかを確認します (必要に応じてログインを求めます)
http://localhost:3000用に設定された Auth0 Regular Web Application を作成しますAUTH0_DOMAIN、AUTH0_CLIENT_ID、AUTH0_CLIENT_SECRET、AUTH0_SESSION_ENCRYPTION_KEY、BASE_URLを含む.envファイルを生成します
4
Auth0 ミドルウェアで Hono Webサーバーをセットアップする
index.ts ファイル内の初期テンプレートを、次の例に置き換えてください。このコード例では、環境変数を自動的に読み込む設定不要の構成を示しており、デフォルトで公開ルートを持つ auth0() ミドルウェアと、requiresAuth() を使用する保護されたルートを作成します。./src/index.ts
5
アプリを起動する
サーバーを起動し、
http://localhost:3000を開きます。チェックポイントHono アプリは http://localhost:3000 で実行されているはずです。
/ ルートは公開されています。/profile にアクセスすると、ログイン (未認証の場合) にリダイレクトされ、認証に成功するとプロファイルデータが返されるはずです。トラブルシューティング
高度な使い方
- 選択的な保護:
app.use(auth0({ authRequired: false }))を使うとルートはデフォルトで公開され、app.use('/private/*', requiresAuth())を使うと特定のパスだけを保護できます。 - サイレントログイン:
attemptSilentLogin()ミドルウェアを使ってサイレント認証を試みることで、UX を向上させます。 - カスタムのログインフロー:
login({...})を呼び出して、引き継ぐクエリパラメータ、redirectAfterLogin、またはサイレントログインのオプションをカスタマイズします。 - トークン管理: ミドルウェアでは、セッション経由でアクセストークンと ID トークンを利用できます。スコープは最小権限の原則に従って設定し、リフレッシュトークンは安全にローテーションしてください。
ベストプラクティスとセキュリティ
- 機密情報をソース管理に含めず、環境変数を使用してください。
- 32文字以上の
AUTH0_SESSION_ENCRYPTION_KEYを使用してください。 - 本番環境では、cookie の
secureをtrueに設定し、適切なsameSiteポリシーを指定してください。 - トークンのスコープは必要最小限にし、API 用のアクセストークンをリクエストする場合にのみ audience を使用してください。
- 認証固有のエラーを適切に処理できるよう、
app.onErrorでAuth0Errorを捕捉してください。