mcpField
A
auth0-laravel

auth0-laravel

github.com/auth0開発55209 回インストール1 日前に更新
リポジトリ

auth0-laravel について

Laravel 11以上のWebアプリに`auth0/login`でAuth0認証を追加するスキルです。ログイン、ログアウト、プロフィールに加え、Laravelのガードやミドルウェアの設定を扱います。

主な機能

  1. 01Auth0 Laravel SDKの設定
  2. 02ログイン・コールバック・ログアウトルートの自動登録
  3. 03Laravelガード経由でのユーザーとクレームの取得
  4. 04authミドルウェアによるルート保護

活用シーン

  1. 01Laravel WebアプリへのAuth0ログイン追加
  2. 02保護されたルートでのプロフィール参照
  3. 03セッションベースのWeb認証の設定

インストール

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

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

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

同梱ファイル

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

references/
api.md
integration.md
setup.md

詳細

Auth0 Laravel Web アプリ統合

auth0/login(Laravel Auth0 SDK)を使用して、Laravel Web アプリケーションにログイン、ログアウト、ユーザープロファイルを追加します。


前提条件

  • Laravel 11+ アプリケーション
  • 拡張機能 mbstring、openssl、json を含む PHP 8.2+
  • Composer がインストール済みであること
  • Auth0 の Regular Web Application を設定済みであること(API ではなく、Application である必要があります)
  • Auth0 のセットアップがまだの場合は、まず auth0-quickstart スキルを使用してください

使用しないケース

シナリオ代わりに使用
JWT Bearer 検証を行う Laravel APIauth0-laravel-api(ステートレスなトークンガード)
フレームワークを使用しないプレーン PHP の Web アプリauth0-php
プレーン PHP の APIauth0-php-api
シングルページアプリケーションauth0-react、auth0-vue、または auth0-angular
Next.js アプリケーションauth0-nextjs
Node.js Web アプリauth0-express または auth0-fastify
Flask Web アプリauth0-flask

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

1. SDK をインストールする
composer require auth0/login

auth0/login パッケージには auth0/auth0-php(v8.19 以降)が必要で、自動的にインストールされます。また、PSR-18 HTTP クライアントも必要です。まだインストールしていない場合は、Guzzle をインストールしてください。

composer require guzzlehttp/guzzle guzzlehttp/psr7
2. 設定を公開する
php artisan vendor:publish --tag=auth0

これにより、ガード、ミドルウェア、ルートの設定を含む config/auth0.php が作成されます。

3. 環境を設定する

.env に追加します。

APP_URL=http://localhost:8000
AUTH0_DOMAIN=your-tenant.us.auth0.com
AUTH0_CLIENT_ID=your_client_id
AUTH0_CLIENT_SECRET=your_client_secret
AUTH0_AUDIENCE=https://your-api-identifier
AUTH0_REDIRECT_URI=${APP_URL}/callback

AUTH0_DOMAIN は Auth0 テナントのドメインです(https:// を除く)。AUTH0_CLIENT_ID と AUTH0_CLIENT_SECRET は、Auth0 Application の設定で確認できます。AUTH0_AUDIENCE には、Auth0 に登録された API 識別子(Auth0 Dashboard > Applications > APIs)を設定する必要があります。設定しない場合、Auth0 は SDK がデコードできない不透明なアクセストークンを返すため、セッションの復元時にクラッシュします。SDK はデフォルトで APP_KEY を Cookie のシークレットとして使用するため、別途シークレットを設定する必要はありません。

重要: 組み込みの開発サーバー(http://localhost:8000)を使用する場合は、APP_URL にポート番号が含まれていることを確認してください。Laravel の新規インストールでは、デフォルトで http://localhost(ポート番号なし)に設定されるため、コールバック URL が一致しなくなります。

4. Auth0 Dashboard を設定する

Auth0 Application の設定で、次のようにします。

  • Application Type:Regular Web Application
  • Allowed Callback URLs:http://localhost:8000/callback
  • Allowed Logout URLs:http://localhost:8000
5. Auth ガードを設定する

config/auth.php を更新して、Auth0 ガードを使用します。

'guards' => [
    'web' => [
        'driver' => 'auth0.authenticator',
        'provider' => 'auth0-provider',
        'configuration' => 'web',
    ],
],

'providers' => [
    'auth0-provider' => [
        'driver' => 'auth0.provider',
        'repository' => 'auth0.repository',
    ],
],

configuration キーは、config/auth0.php のガード定義に対応します(web はセッションベースの認証に STRATEGY_REGULAR を使用します)。デフォルトの web ガードを上書きすることで、ガード名を指定しなくても Laravel 標準の auth ミドルウェアと auth()->user() が機能します。SDK は同じ設定で auth0-session ガードも自動登録しますが、web を上書きするほうが簡単です。

6. ルートは自動登録される

config/auth0.php で registerAuthenticationRoutes が true の場合、SDK は次のルートを自動登録します。

  • GET /login - Auth0 Universal Login にリダイレクトします
  • GET /callback - OAuth コールバックを処理し、コードをトークンと交換します
  • GET /logout - セッションを破棄し、Auth0 のログアウトにリダイレクトします

認証フローのルートを手動で定義する必要はありません。

7. 保護されたルートを追加する

routes/web.php に追加します。

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('home', ['user' => auth()->user()]);
});

Route::middleware('auth')->group(function () {
    Route::get('/profile', function () {
        return view('profile', ['user' => auth()->user()]);
    });
});

標準の auth ミドルウェアは Auth0 ガードで動作します。認証されていないユーザーは /login にリダイレクトされます。

8. ビューを作成する

resources/views/home.blade.php を作成します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home</title>
</head>
<body>
    @if($user)
        <h1>Welcome, {{ $user->name }}!</h1>
        <p><a href="/profile">Profile</a></p>
        <p><a href="/logout">Logout</a></p>
    @else
        <h1>Welcome</h1>
        <p><a href="/login">Login</a></p>
    @endif
</body>
</html>

resources/views/profile.blade.php を作成します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Profile</title>
</head>
<body>
    <h1>{{ $user->name }}</h1>
    <p>Email: {{ $user->email }}</p>
    <img src="{{ $user->picture }}" alt="avatar" width="100" />
    <hr>
    <h2>User Claims</h2>
    <pre>{{ json_encode($user->jsonSerialize(), JSON_PRETTY_PRINT) }}</pre>
    <p><a href="/">Home</a> | <a href="/logout">Logout</a></p>
</body>
</html>
9. 認証をテストする
php artisan serve

http://localhost:8000 にアクセスして、Login をクリックします。

重要: アプリには必ず http://localhost:8000 経由でアクセスしてください(http://127.0.0.1:8000 ではなく)。コールバック URL では localhost を使用するため、Auth0 へのログインリダイレクト後もセッション Cookie を保持するには、localhost 用に設定する必要があります。127.0.0.1 を使用すると、セッション Cookie が localhost のコールバック URL に送信されず、「Invalid state」エラーが発生します。

よくある間違い

間違い修正方法
Laravel で auth0/auth0-php を直接使用するSDK を Laravel のガード、ミドルウェア、ルートでラップした auth0/login を使用します
Auth0 Dashboard でアプリを SPA タイプとして作成するサーバー側のセッション認証には、Regular Web Application である必要があります
Auth0 Dashboard にコールバック URL が設定されていないAllowed Callback URLs に http://localhost:8000/callback を追加します
Auth0 Dashboard にログアウト URL が設定されていないAllowed Logout URLs に http://localhost:8000 を追加します
設定を公開していない設定前に php artisan vendor:publish --tag=auth0 を実行します
ガードのドライバー名が間違っているドライバーは auth0.authenticator です(auth0 や auth0.guard ではありません)
APP_KEY の設定を忘れているphp artisan key:generate を実行します。SDK はこれを Cookie シークレットとして使用します
Auth0::getCredentials() を直接呼び出すLaravel の auth()->user() を使用します。SDK はガード経由で統合されます
/login、/callback、/logout のルートを手動で定義するルートはサービスプロバイダーによって自動登録されます
AUTH0_DOMAIN に https:// プレフィックスを付けるドメインのみを指定します。https://tenant.us.auth0.com ではなく tenant.us.auth0.com を使用します
ミドルウェアなしで $request->user() を使用するauth ミドルウェアが適用されたルートでのみ使用できます
AUTH0_AUDIENCE 環境変数が設定されていないオーディエンスがないと、Auth0 は SDK が解析できない不透明なトークンを返します。その結果、「JWT string must contain two dots」エラーが発生します
http://localhost:8000 ではなく http://127.0.0.1:8000 にアクセスする127.0.0.1 向けに設定されたセッション Cookie は localhost のコールバックには送信されず、「Invalid state」エラーが発生します
$user->getName() や $user->getEmail() を使用するStatefulUser はマジックメソッド __get を使用します。$user->name、$user->email、$user->picture を使用します

主要な SDK メソッド

メソッド使用場所目的
auth()->user()ルート/コントローラー内認証済みの StatefulUser または null を返します
auth()->check()ルート/コントローラー/ビュー内ユーザーが認証済みの場合に true を返します
auth()->guard('web')複数のガードを使用する場合特定の Auth0 ガードインスタンスを取得します
$user->nameユーザーオブジェクト上ユーザーの表示名(__get マジック経由)
$user->emailユーザーオブジェクト上ユーザーのメールアドレス(__get マジック経由)
$user->pictureユーザーオブジェクト上ユーザーのアバター URL(__get マジック経由)
$user->getAuthIdentifier()ユーザーオブジェクト上Auth0 の sub クレームを返します
$user->getAttribute('claim')ユーザーオブジェクト上任意のクレーム値を明示的に返します
$user->jsonSerialize()ユーザーオブジェクト上すべてのユーザークレームを配列として返します

ユーザーオブジェクト

認証済みユーザーは、Laravel の Authenticatable コントラクトを実装する StatefulUser インスタンスです。クレームには、__get マジックによってプロパティ形式でアクセスできます。

$user = auth()->user();

$user->name;                   // display name (via __get)
$user->email;                  // email address (via __get)
$user->picture;                // avatar URL (via __get)
$user->email_verified;         // any claim via property access
$user->getAuthIdentifier();   // Auth0 'sub' (e.g. 'auth0|abc123')
$user->getAttribute('sub');    // explicit claim access
$user->jsonSerialize();        // all claims as array

ID トークンのクレームには、プロパティとしてアクセスできます。例:$user->nickname、$user->updated_at、$user->sub など。明示的にアクセスする場合は、$user->getAttribute('claim_name') を使用します。


関連スキル

  • auth0-laravel-api - JWT Bearer トークン検証で Laravel API ルートを保護します
  • auth0-php - フレームワークを使用しない、プレーン PHP の Web アプリ
  • auth0-quickstart - Auth0 の初期設定
  • auth0-mfa - 多要素認証を追加します
  • auth0-cli - ターミナルから Auth0 リソースを管理します

クイックリファレンス

ガード設定(config/auth.php):

'guards' => [
    'web' => [
        'driver' => 'auth0.authenticator',
        'provider' => 'auth0-provider',
        'configuration' => 'web',
    ],
],
'providers' => [
    'auth0-provider' => [
        'driver' => 'auth0.provider',
        'repository' => 'auth0.repository',
    ],
],

ルートの保護:

Route::middleware('auth')->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index']);
});

Blade で認証状態を確認する:

@auth
    <p>Hello, {{ auth()->user()->name }}</p>
@else
    <a href="/login">Login</a>
@endauth

環境変数:

  • APP_URL - ポートを含むアプリケーション URL(例:http://localhost:8000)
  • AUTH0_DOMAIN - Auth0 テナントのドメイン(例:tenant.us.auth0.com)
  • AUTH0_CLIENT_ID - アプリケーションのクライアント ID
  • AUTH0_CLIENT_SECRET - アプリケーションのクライアントシークレット
  • AUTH0_AUDIENCE - API 識別子(JWT アクセストークンに必須)
  • AUTH0_REDIRECT_URI - コールバック URL(デフォルトは ${APP_URL}/callback)
  • APP_KEY - Laravel アプリのキー。Cookie の暗号化シークレットとして使用されます

詳細ドキュメント


参考資料

コメント