メインコンテンツへスキップ
Auth0のLaravel SDKを使用すると、Laravelアプリケーションにトークンベースの認可とルーティングに基づくアクセスコントロールを手軽に追加できます。このガイドでは、新規(または既存)のLaravel 9または10アプリケーションにAuth0を統合する方法を説明します。
バックエンドアプリケーションが従来のWebアプリケーションと異なるのは、前者がユーザー認証を処理しない、またはユーザーインターフェイスを持っていない点にあります。バックエンドアプリケーションには、他のアプリケーションが対話できるAPIが用意されており、ルートへのアクセス制御を行うために、要求内の **Authorization**ヘッダー からのアクセストークン を受け入れます。別のフロントエンドアプリケーションは通常、これらのタイプのバックエンドと対話するために構築されます。これには、シングルページアプリケーションネイティブまたはモバイルアプリ(Auth0はこれらすべてに対しSDKも提供)などさまざまな可能性があります。ユーザーがバックエンドアプリケーションと対話する必要がある場合、まず、フロントエンドアプリケーションを使ってAuth0と認証を行います。フロントエンドアプリケーションはAuth0からアクセストークンを取得し、これを使ってユーザーに代わって、バックエンドアプリケーションに要求することができます。名前が示唆するように、アクセストークンはアクセス制御(認可)の問題に対処するように設計されており、ユーザーに関する情報は含まれていません。バックエンドアプリケーションは、アクセストークンとのみ動作します。 Management APIを使ってトークンを作成したユーザーに関する情報を取得することができます。これについては後で説明します。
1

Laravelをインストールする

Laravelアプリケーションをまだセットアップしていない場合 には、シェルを開いて、新規プロジェクトに適切なディレクトリに移動し、次のコマンドを実行します:
composer create-project --prefer-dist laravel/laravel auth0-laravel-api ^9.0
このガイドにあるすべてのコマンドは、Laravelプロジェクトディレクトリのルートから実行されていることを前提としています。必ず新規プロジェクトのディレクトリに移動(cd)してください:
cd auth0-laravel-api
2

SDKをインストールする

プロジェクトディレクトリで次のコマンドを実行して、Auth0 Laravel SDKをインストールします:
composer require auth0/login:^7.8 --update-with-all-dependencies
そして、アプリケーションにSDK構成ファイルを生成します:
php artisan vendor:publish --tag auth0
3

SDKを構成する

プロジェクトディレクトリから次のコマンドを実行して、Auth0 CLIをダウンロードします:
curl -sSfL https://raw.githubusercontent.com/auth0/auth0-cli/main/install.sh | sh -s -- -b .
そして、Auth0アカウントを使ってCLIを認証し、プロンプトでユーザーとしてログインすることを選択します:
./auth0 login
次に、Auth0で新しいアプリケーションを作成します:
./auth0 apps create \
--name "My Laravel Backend" \
--type "regular" \
--auth-method "post" \
--callbacks "http://localhost:8000/callback" \
--logout-urls "http://localhost:8000" \
--reveal-secrets \
--no-input \
--json > .auth0.app.json
また、新しいAPIも作成します:
./auth0 apis create \
--name "My Laravel Backend API" \
--identifier "https://github.com/auth0/laravel-auth0" \
--offline-access \
--no-input \
--json > .auth0.api.json
これで、SDKを構成するプロジェクトディレクトリ内に2つのファイルが作成されます。これらのファイルには資格情報が保管されているため、機密として扱うことが重要です。必ず、バージョン管理では、これらのファイルをコミットしないようにしてください。Gitを使用している場合は、必ず.gitignoreファイルに追加します:
echo ".auth0.*.json" >> .gitignore
4

アクセス制御

SDKは、apiミドルウェアと併用するLaravelアプリケーションで認可ガードを自動的に登録します。Laravelはデフォルトで、アプリケーションのroutes/api.phpファイルのすべてのルートに適用します。
構成を追加せずにSDKが期待通りに動作するには、routes/api.php ファイルでルートを定義する必要があります。
アプリケーションの経路へのアクセスを制約するには、Auth0 SDKの認可ガードを使用することができます。Authorizationヘッダーで有効なアクセストークンを含まない要求を拒否するには、Laravelのauthミドルウェアを使用することができます。
Route::get('/private', function () {
return response()->json([
'message' => 'Your token is valid; you are authorized.',
]);
})->middleware('auth');
また、これをLaravelのcanミドルウェアと組み合わせると、提供されたトークンに特定の権限を要求することができます。
Route::get('/scope', function () {
return response()->json([
'message' => 'Your token is valid and has the read:messages permission; you are authorized.',
]);
})->middleware('auth')->can('read:messages');
5

トークン情報

提供されたアクセストークンについての情報は、LaravelのAuthファサードまたはauth()ヘルパー関数を介して利用できます。以下は、ユーザーの識別子とメールアドレスを取得する例です。
Route::get('/', function () {
if (! auth()->check()) {
return response()->json([
'message' => 'You did not provide a valid token.',
]);
}
return response()->json([
'message' => 'Your token is valid; you are authorized.',
'id' => auth()->id(),
'token' => auth()?->user()?->getAttributes(),
]);
});
6

ユーザー情報を取得する

Auth0 Management APIを使って、Auth0からアクセストークンを作成したユーザーについての情報を取得することができます。SDKにはこのAPIに便利なラッパーが備わっており、SDKのmanagement()メソッドからアクセス可能です。Management APIを呼び出す前に、アプリケーションがManagement APIと通信できるようにしなければなりません。 これを実行するには、Auth0 DashboardのAPIページ[Auth0 Management API]を選択してから[Machine to Machine Applications(M2Mアプリケーション)]タブを選択します。Laravelアプリケーションを認可してから、下矢印をクリックして、付与したいスコープを選択します。以下の例では、read:usersスコープを付与する必要があります。APIエンドポイントのリストと必要なスコープについては、Management APIのドキュメントを参照してください。
use Auth0\Laravel\Facade\Auth0;
Route::get('/me', function () {
$user = auth()->id();
$profile = cache()->get($user);
if (null === $profile) {
$endpoint = Auth0::management()->users();
$profile = $endpoint->get($user);
$profile = Auth0::json($profile);
cache()->put($user, $profile, 120);
}
$name = $profile['name'] ?? 'Unknown';
$email = $profile['email'] ?? 'Unknown';
return response()->json([
'name' => $name,
'email' => $email,
]);
})->middleware('auth');
アプリケーションでユーザー情報を短期間キャッシュする必要があります。 これによって、アプリケーションがAuth0に対して行う要求数を減らし、パフォーマンスが向上します。ユーザー情報をアプリケーションに長期間保存するとデータが古くなる可能性があるため避けてください。ユーザーの識別子以外のユーザー情報を持続的データベースに保存することも避けてください。
7

アプリケーションを実行する

Laravelアプリケーションを起動する準備が整いました。要求を受け付けることができます:
php artisan serve
8

テストトークンを取得する

アクセストークンの取得については、こちらに詳しく記載されています。ただし、このクイックスタートでは、API設定の[test(テスト)]ビューからアクセストークンを簡単に使用することができます。
上で作成した/meルートには関連付けられた実際のユーザーが存在しないため、テストトークンで動作しません。
チェックポイント
シェルを開き、アプリケーションに要求を発行するようにします。 まず、パブリックルートを要求します。 curl —request GET \ —url http://localhost:8000/api \ —header ‘Accept: application/json’ 次に、Authorizationヘッダーでアクセストークンを使用して、保護されたルートを要求します。 curl —request GET \ —url http://localhost:8000/api/private \ —header ‘Accept: application/json’ \ —header ‘Authorization: Bearer YOUR_ACCESS_TOKEN’ 最後に、スコープで保護されたルートを要求するようにします。この要求は、アクセストークンにread:messagesスコープが付与されている場合にのみ成功します。 curl —request GET \ —url http://localhost:8000/api/scope \ —header ‘Accept: application/json’ \ —header ‘Authorization: Bearer YOUR_ACCESS_TOKEN’

その他の情報

  • ユーザーリポジトリとモデルはAuth0 Laravel SDKを拡張して、カスタムのユーザーモデルを使用し、データベースでユーザーの保管や取得を行う方法を指定することができます。
  • イベントフックはAuth0 Laravel SDKで発生したイベントをリッスンする方法を処理して、統合の動作を完全にカスタマイズすることができます。
  • Management API対応はAuth0 Laravel SDKに組み込まれているため、LaravelアプリケーションからManagement APIと対話することができます。

次のステップ

成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。
  • Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
  • laravel-auth0 SDK - このチュートリアルで使用されているSDKをより詳しく説明します
  • Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます
I