AI を使って Auth0 を統合する
AI を使って Auth0 を統合する
Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントをお使いの場合は、エージェントスキルを使えば、数分で Auth0 認証を自動的に追加できます。インストール:次に、AI アシスタントに次のように依頼します:AI アシスタントが、Auth0 アプリケーションの作成、資格情報の取得、
@auth0/auth0-react-router のインストール、プロバイダーの構成、ルートのセットアップまでを自動で行います。エージェントスキルの詳細なドキュメント →はじめに
このクイックスタートでは、React RouterアプリケーションにAuth0の認証を追加する方法を説明します。Auth0 React Router SDKを使用して、ログイン、ログアウト、ユーザープロファイルの機能を備えたセキュアなアプリを構築します。SDKはOIDCフローをサーバー側で処理し、セッションをJWEで暗号化されたクッキーに保存するため、トークンがブラウザーに渡ることは一切ありません。1
新しい React Router プロジェクトを作成する
このクイックスタート用に、新しい React Router プロジェクトを作成します。プロジェクトを開きます。
既存のReact RouterアプリにAuth0を追加する場合は、この手順を省略してください。
2
Auth0 React Router SDKをインストールする
3
Auth0を設定する
Auth0アプリケーションを作成し、コールバックURLとログアウトURLを設定します。
- クイックセットアップ
- CLI
- Dashboard
4
環境変数を設定する
プロジェクトのルートに
.env ファイルを作成します。5
Auth0のサーバーインスタンスを作成する
app/auth0.server.ts を作成します。.server.ts という接尾辞が付いたファイルは React Router のバンドラーによってクライアントバンドルから除外されるため、シークレットをサーバー側だけに留めておけます。app/auth0.server.ts
6
認証ルートを追加する
/auth/* 配下のすべてのパスを処理するスプラットルートを作成します。handleAuth は、URL のパスと HTTP メソッドに応じて、内部で handleLogin、handleCallback、handleLogout、handleBackchannelLogout に処理を振り分けます。app/routes/auth.$.tsx
app/routes.ts
7
ルートレイアウトを設定する
app/root.tsx に Auth0Provider と rootAuthLoader を追加します。rootAuthLoader はセッションクッキーを復号し、認証状態をプロバイダーに渡します。トークンがブラウザーに送信されることはありません。app/root.tsx
Auth0Provider は useRouteLoaderData('root') からセッションデータを読み取るため、ルートのルート (root route) の id を root にする必要があります。ファイルベースのルーティングでは、React Router がファイル名をもとにこの id を自動で設定します。カスタムのルート設定を使用する場合は、layout() の呼び出しに { id: 'root' } を渡してください。8
ログインとログアウトを追加
組み込みのコンポーネントを使用して、ログインボタンとログアウトボタンを表示します。
LoginButton は /auth/login に、LogoutButton は /auth/logout にリダイレクトします。OIDC フローは Auth0 が処理し、サインイン後にユーザーをアプリへリダイレクトして戻します。app/routes/_index.tsx
9
ユーザープロファイルを表示
useUser Hooksを使うと、任意のクライアントコンポーネントから認証済みユーザーのプロフィールにアクセスできます。さらにローダーで requireSession と組み合わせれば、ページのレンダリング前に未認証のリクエストをサーバー側でブロックできます。app/routes/profile.tsx
10
アプリケーションを実行する
http://localhost:5173 を開き、Log in をクリックします。Auth0のユニバーサルログインページにリダイレクトされます。サインインすると、アプリにリダイレクトされて戻ってきます。これで、アプリのログインとログアウトが機能するようになりました。セッションはJWEで暗号化されたクッキーに保存され、アクセストークンはサーバー上に保持されるため、ブラウザーに送信されることはありません。
トラブルシューティング
JWEDecryptionFailed — セッションクッキーを復号できない
JWEDecryptionFailed — セッションクッキーを復号できない
**原因:**セッションクッキーの発行後に
AUTH0_SESSION_SECRETが変更されたか、値が32文字未満です。解決方法:localhostのブラウザークッキーを削除し、AUTH0_SESSION_SECRETが32文字以上であることを確認してから、開発サーバーを再起動してください。新しいシークレットはopenssl rand -hex 32で生成できます。Callback URLの不一致 — ログイン後にAuth0がエラーを返す
Callback URLの不一致 — ログイン後にAuth0がエラーを返す
**原因:**Auth0が受け取ったリダイレクトURLが、Allowed Callback URLsに登録されたどの値とも一致していません。解決方法:Auth0 Dashboardで [Applications] > [Applications] に移動してアプリを選択し、[Application Settings] で [Allowed Callback URLs] が
http://localhost:5173/auth/callbackに設定されていることを確認します。末尾のスラッシュや余分な空白があれば削除し、[Save Changes] をクリックしてください。/auth/loginで404 — ルートが見つからない
/auth/loginで404 — ルートが見つからない
原因:
auth.$.tsxスプラットルートが存在しないか、routes.tsに登録されていません。解決方法:app/routes/auth.$.tsxが存在し、app/routes.tsにroute('auth/*', 'routes/auth.$.tsx')が含まれていることを確認してください。routes.tsを編集した後は、開発サーバーを再起動してください。ログイン後にuseUserがnullを返す
ログイン後にuseUserがnullを返す
原因:
rootAuthLoaderがapp/root.tsxからエクスポートされていないか、ルートルートのidがrootになっていません。解決方法:app/root.tsxでexport const loader = ({ request }) => rootAuthLoader(request)がエクスポートされていることを確認してください。カスタムのルート構成を使用している場合は、ルートレイアウトをlayout('root.tsx', { id: 'root' }, [...routes])として登録してください。context.getでTypeError — ミドルウェアが動作しない
context.getでTypeError — ミドルウェアが動作しない
原因:
defineRouteAuthとauth0Middlewareを使用するには、ミドルウェアAPIが導入されたReact Router 7.9.0以降が必要です。解決方法:react-routerを>=7.9.0にアップグレードしてください。または、各ローダーでrequireSession / requireUserを使用して、ルートを個別に保護することもできます。高度な使い方
アクセストークンでバックエンドAPIを呼び出す
アクセストークンでバックエンドAPIを呼び出す
.envにAUTH0_AUDIENCEを追加し、APIの識別子を設定します (識別子はAuth0 Dashboard → Applications > APIs → API Settings → Identifierで確認できます) 。次に、ローダー内でgetAccessTokenを使用します。この方法なら、トークンがブラウザーに渡ることはありません。app/routes/data.tsx
ロールベースのルート保護
ロールベースのルート保護
defineRouteAuthミドルウェア (React Router 7.9.0以降) を使用すると、ルート単位でロールによるアクセス制御を適用できます。ロールはデフォルトでhttps://auth0.com/claims/rolesクレームから読み取られます。app/routes/admin.tsx
403が返されます。SPAモード(クライアント側PKCE)
SPAモード(クライアント側PKCE)
SDKは、
@auth0/auth0-spa-jsをベースにした完全なクライアント側モードでも動作します。.envにVITE_AUTH0_DOMAINとVITE_AUTH0_CLIENT_IDを追加すると、Auth0Providerがこれらを自動的に検出してPKCEフローに切り替えます。ほかにコードを変更する必要はありません。