Auth0のLaravel SDKを使用すると、Laravelアプリケーションにトークンベースの認可とルーティングに基づくアクセスコントロールを手軽に追加できます。このガイドでは、新規(または既存)のLaravel 9または10アプリケーションにAuth0を統合する方法を説明します。
バックエンドアプリケーションが従来のWebアプリケーションと異なるのは、前者がユーザー認証を処理しない、またはユーザーインターフェイスを持っていない点にあります。バックエンドアプリケーションには、他のアプリケーションが対話できるAPIが用意されており、ルートへのアクセス制御を行うために、要求内の **
バックエンドアプリケーションが従来のWebアプリケーションと異なるのは、前者がユーザー認証を処理しない、またはユーザーインターフェイスを持っていない点にあります。バックエンドアプリケーションには、他のアプリケーションが対話できるAPIが用意されており、ルートへのアクセス制御を行うために、要求内の **
Authorization
**ヘッダー からのアクセストークン を受け入れます。別のフロントエンドアプリケーションは通常、これらのタイプのバックエンドと対話するために構築されます。これには、シングルページアプリケーションやネイティブまたはモバイルアプリ(Auth0はこれらすべてに対しSDKも提供)などさまざまな可能性があります。ユーザーがバックエンドアプリケーションと対話する必要がある場合、まず、フロントエンドアプリケーションを使ってAuth0と認証を行います。フロントエンドアプリケーションはAuth0からアクセストークンを取得し、これを使ってユーザーに代わって、バックエンドアプリケーションに要求することができます。名前が示唆するように、アクセストークンはアクセス制御(認可)の問題に対処するように設計されており、ユーザーに関する情報は含まれていません。バックエンドアプリケーションは、アクセストークンとのみ動作します。 Management APIを使ってトークンを作成したユーザーに関する情報を取得することができます。これについては後で説明します。1
Laravelをインストールする
Laravelアプリケーションをまだセットアップしていない場合 には、シェルを開いて、新規プロジェクトに適切なディレクトリに移動し、次のコマンドを実行します:このガイドにあるすべてのコマンドは、Laravelプロジェクトディレクトリのルートから実行されていることを前提としています。必ず新規プロジェクトのディレクトリに移動(
cd
)してください:2
SDKをインストールする
3
SDKを構成する
プロジェクトディレクトリから次のコマンドを実行して、Auth0 CLIをダウンロードします:そして、Auth0アカウントを使ってCLIを認証し、プロンプトでユーザーとしてログインすることを選択します:次に、Auth0で新しいアプリケーションを作成します:また、新しいAPIも作成します:これで、SDKを構成するプロジェクトディレクトリ内に2つのファイルが作成されます。これらのファイルには資格情報が保管されているため、機密として扱うことが重要です。必ず、バージョン管理では、これらのファイルをコミットしないようにしてください。Gitを使用している場合は、必ず
.gitignore
ファイルに追加します:4
アクセス制御
SDKは、アプリケーションの経路へのアクセスを制約するには、Auth0 SDKの認可ガードを使用することができます。また、これをLaravelの
api
ミドルウェアと併用するLaravelアプリケーションで認可ガードを自動的に登録します。Laravelはデフォルトで、アプリケーションのroutes/api.php
ファイルのすべてのルートに適用します。構成を追加せずにSDKが期待通りに動作するには、
routes/api.php
ファイルでルートを定義する必要があります。Authorization
ヘッダーで有効なアクセストークンを含まない要求を拒否するには、Laravelのauth
ミドルウェアを使用することができます。can
ミドルウェアと組み合わせると、提供されたトークンに特定の権限を要求することができます。5
トークン情報
提供されたアクセストークンについての情報は、Laravelの
Auth
ファサードまたはauth()
ヘルパー関数を介して利用できます。以下は、ユーザーの識別子とメールアドレスを取得する例です。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のドキュメントを参照してください。アプリケーションでユーザー情報を短期間キャッシュする必要があります。 これによって、アプリケーションがAuth0に対して行う要求数を減らし、パフォーマンスが向上します。ユーザー情報をアプリケーションに長期間保存するとデータが古くなる可能性があるため避けてください。ユーザーの識別子以外のユーザー情報を持続的データベースに保存することも避けてください。
7
アプリケーションを実行する
Laravelアプリケーションを起動する準備が整いました。要求を受け付けることができます:
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の機能性を拡張できる各種の統合を見つけられます