Laravelアプリケーションに認可を追加する
Auth0のLaravel SDKを使用すると、Laravelアプリケーションにトークンベースの認可とルーティングに基づくアクセスコントロールを手軽に追加できます。このガイドでは、新規(または既存)のLaravel 9または10アプリケーションにAuth0を統合する方法を説明します。
バックエンドアプリケーションが従来のWebアプリケーションと異なるのは、前者がユーザー認証を処理しない、またはユーザーインターフェイスを持っていない点にあります。バックエンドアプリケーションには、他のアプリケーションが対話できるAPIが用意されており、ルートへのアクセス制御を行うために、要求内のAuthorization
ヘッダーからのアクセストークンを受け入れます。
別のフロントエンドアプリケーションは通常、これらのタイプのバックエンドと対話するために構築されます。これには、シングルページアプリケーションやネイティブまたはモバイルアプリ(Auth0はこれらすべてに対しSDKも提供)などさまざまな可能性があります。
ユーザーがバックエンドアプリケーションと対話する必要がある場合、まず、フロントエンドアプリケーションを使ってAuth0と認証を行います。フロントエンドアプリケーションはAuth0からアクセストークンを取得し、これを使ってユーザーに代わって、バックエンドアプリケーションに要求することができます。
名前が示唆するように、アクセストークンはアクセス制御(認可)の問題に対処するように設計されており、ユーザーに関する情報は含まれていません。バックエンドアプリケーションは、アクセストークンとのみ動作します。Management APIを使ってトークンを作成したユーザーに関する情報を取得することができます。これについては後で説明します。
Laravelアプリケーションをまだセットアップしていない場合には、シェルを開いて、新規プロジェクトに適切なディレクトリに移動し、次のコマンドを実行します:
composer create-project --prefer-dist laravel/laravel auth0-laravel-api ^9.0
Was this helpful?
このガイドにあるすべてのコマンドは、Laravelプロジェクトディレクトリのルートから実行されていることを前提としています。必ず新規プロジェクトのディレクトリに移動(cd
)してください:
cd auth0-laravel-api
Was this helpful?
プロジェクトディレクトリで次のコマンドを実行して、Auth0 Laravel SDKをインストールします:
composer require auth0/login:^7.8 --update-with-all-dependencies
Was this helpful?
そして、アプリケーションにSDK構成ファイルを生成します:
php artisan vendor:publish --tag auth0
Was this helpful?
プロジェクトディレクトリから次のコマンドを実行して、Auth0 CLIをダウンロードします:
curl -sSfL https://raw.githubusercontent.com/auth0/auth0-cli/main/install.sh | sh -s -- -b .
Was this helpful?
そして、Auth0アカウントを使ってCLIを認証し、プロンプトでユーザーとしてログインすることを選択します:
./auth0 login
Was this helpful?
次に、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
Was this helpful?
また、新しいAPIも作成します:
./auth0 apis create \
--name "My Laravel Backend API" \
--identifier "https://github.com/auth0/laravel-auth0" \
--offline-access \
--no-input \
--json > .auth0.api.json
Was this helpful?
これで、SDKを構成するプロジェクトディレクトリ内に2つのファイルが作成されます。
これらのファイルには資格情報が保管されているため、機密として扱うことが重要です。必ず、バージョン管理では、これらのファイルをコミットしないようにしてください。Gitを使用している場合は、必ず.gitignore
ファイルに追加します:
echo ".auth0.*.json" >> .gitignore
Was this helpful?
SDKは、api
ミドルウェアと併用するLaravelアプリケーションで認可ガードを自動的に登録します。Laravelはデフォルトで、アプリケーションの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');
Was this helpful?
また、これを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');
Was this helpful?
提供されたアクセストークンについての情報は、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(),
]);
});
Was this helpful?
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');
Was this helpful?
Laravelアプリケーションを起動する準備が整いました。要求を受け付けることができます:
php artisan serve
Was this helpful?
アクセストークンの取得については、こちらに詳しく記載されています。ただし、このクイックスタートでは、API設定の[test(テスト)]ビューからアクセストークンを簡単に使用することができます。
checkpoint.header
シェルを開き、アプリケーションに要求を発行するようにします。
まず、パブリックルートを要求します。
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と対話することができます。
Next Steps
Excellent work! If you made it this far, you should now have login, logout, and user profile information running in your application.
This concludes our quickstart tutorial, but there is so much more to explore. To learn more about what you can do with Auth0, check out:
- Auth0 Dashboard - Learn how to configure and manage your Auth0 tenant and applications
- laravel-auth0 SDK - Explore the SDK used in this tutorial more fully
- Auth0 Marketplace - Discover integrations you can enable to extend Auth0’s functionality
Sign up for an or to your existing account to integrate directly with your own tenant.