Laravelアプリケーションに認可を追加する

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

Was this helpful?

/

このガイドにあるすべてのコマンドは、Laravelプロジェクトディレクトリのルートから実行されていることを前提としています。必ず新規プロジェクトのディレクトリに移動(cd)してください:

cd auth0-laravel-api

Was this helpful?

/

2

SDKをインストールする

プロジェクトディレクトリで次のコマンドを実行して、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?

/

3

SDKを構成する

プロジェクトディレクトリから次のコマンドを実行して、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?

/

4

アクセス制御

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?

/

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(),
]);
});

Was this helpful?

/

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');

Was this helpful?

/

7

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

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

php artisan serve

Was this helpful?

/

8

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

アクセストークンの取得については、こちらに詳しく記載されています。ただし、このクイックスタートでは、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:

Did it work?

Any suggestion or typo?

Edit on GitHub
Sign Up

Sign up for an or to your existing account to integrate directly with your own tenant.