Evan Sims による
このガイドでは、Auth0 PHP SDK を使用して Auth0 を PHP バックエンド API に統合する方法を説明します。ご自身のアカウント向けに設定されたサンプルを使ってこの Quickstart を進められるよう、あらかじめログインしておくことをお勧めします。
Auth0 Dashboard の APIs セクションで、Create API をクリックします。API の名前と identifier を入力します。たとえば https://quickstarts/api です。この identifier は、後でアクセストークンの検証を設定する際に audience として使用します。Signing Algorithm は RS256 のままにします。
デフォルトでは、API はトークンの署名アルゴリズムとして RS256 を使用します。RS256 は秘密鍵と公開鍵のキーペアを使用するため、Auth0 アカウントの公開鍵を使ってトークンを検証します。公開鍵は JSON Web Key Set (JWKS) 形式で提供されており、こちら からアクセスできます。
権限を使用すると、特定のアクセストークンを持つユーザーに代わって、リソースにどのようにアクセスできるかを定義できます。たとえば、ユーザーがマネージャーのアクセスレベルを持っている場合は messages リソースへの読み取りアクセスを許可し、管理者のアクセスレベルを持っている場合はそのリソースへの書き込みアクセスを許可する、といった設定が可能です。
許可する権限は、Auth0 Dashboard の APIs セクションにある Permissions ビューで定義できます。
この例では read:messages スコープを使用します。
この例では、次の内容を示します。
Auth0 が署名したトークンを、PHP で作成したバックエンド API で認可するサンプルアプリケーションを作成してみましょう。ここでは、ドキュメントに適したシンプルな方法で進めます。より堅牢な例については、GitHub 上の Quickstart app もあわせてご確認ください。
HTTPクライアントとメッセージファクトリーのインストール
Auth0 PHP SDK は、プロジェクトのアーキテクチャとの高い相互運用性を実現するために、多くの PHP-FIG 標準をサポートしています。中でも特に重要なのが PSR-17 と PSR-18 です。これらの標準により、メッセージ処理やリクエスト処理を担うネットワークコンポーネントとして、任意のものを組み込めるようになります。SDK で利用するには、互換性のあるライブラリをプロジェクトにインストールする必要があります。
PHP で最も広く使われているネットワークライブラリは Guzzle ですが、PHP コミュニティには他にも多くの選択肢があります。このサンプルアプリケーションでは Guzzle を使用しましょう。
Auth0 PHP SDK を使用するには、PHP の依存関係管理ツールである Composer が必要です。Composer を使うと、プロジェクトに必要なライブラリを定義し、それらをインストールできます。先に進む前に、Composer がインストールされており、シェルから利用できることを確認してください。
Auth0 PHP SDK をインストールするには、プロジェクトのディレクトリで次のシェルコマンドを実行します。
これにより、プロジェクト内に vendor フォルダーが作成され、Auth0 PHP SDK の使用に必要な依存関係がすべてダウンロードされます。さらに、サンプル内で使用される vendor/autoload.php ファイルも作成され、このファイルによってアプリケーションの動作に必要なすべてのクラスが読み込まれます。SDK を動作させるには、この autoload ファイルをプロジェクト内で require することが重要です。
まず、サンプルアプリケーションの設定を保存するために、プロジェクトのルートディレクトリに .env ファイルを作成し、環境変数を入力しましょう。
PHP は .env ファイルを単体では読み込めないため、そのためのライブラリをインストールします。サンプルアプリケーションでは特定のライブラリを使用しますが、実際のアプリケーションでは任意の dotenv ローダーを使用できます。プロジェクトディレクトリから、次のシェルコマンドを実行してライブラリをインストールしましょう。
次に、これらのコードサンプルで使用する PHP ソースファイル index.php を作成し、サンプルアプリケーション用に Auth0 PHP SDK のインスタンスを設定しましょう。
このサンプルアプリケーションでは、認可 に重点を置いています。認可のためにユーザーがバックエンド API にアクセスする前に認証する方法はいくつもあり、たとえば Auth0 の SPA.js ライブラリ を使用できます。このアプローチは、GitHub プロジェクトに付属するこの Quickstart アプリ で紹介されています。どの方法を採用する場合でも、このサンプルアプリケーションを動作させるには、リクエストパラメーターまたはヘッダーを通じてアクセストークンを渡す必要があります。
まず、受信した HTTP リクエストから JSON Web トークン (JWT) を取り出す必要があります。GET リクエストの ?token パラメーター、または HTTP_AUTHORIZATION か Authorization ヘッダーに含まれているかを確認しましょう。
次に、token がある場合はデコードしてみましょう:
API ルーティングの設定によって、これらのチェックの組み込み方は多少異なりますが、原則は同じです。token を確認し、API エンドポイントで認可が必要な場合は、その token が有効でない、または許容できないものであればアクセスを拒否します。
これでも動作しますが、実際のアプリケーションでは、Auth0 のレート制限に達したり、不要なネットワークリクエストでアプリケーションの動作が遅くなったりしないよう、キャッシュを使用するのが一般的です。Auth0 PHP SDK は PSR-6 と呼ばれるキャッシュインターフェースをサポートしており、互換性のある任意のキャッシュライブラリ を組み込むことで、SDK をアーキテクチャに自然に適合させることができます。
このサンプルでは、Symfony Cache コンポーネント ライブラリを使用します。プロジェクトのルートディレクトリから、次のシェルコマンドを実行してください。
次に、それを使用するようSDKに指示するため、SdkConfigurationを更新する必要があります:
これで、サンプルアプリケーションはトークン関連のネットワークリクエストをキャッシュするようになります。