Skip to main content
Evan Sims による
このガイドでは、Auth0 PHP SDK を使用して PHP アプリケーションに Auth0 を統合する方法を説明します。お使いのアカウント用に設定された例でこのクイックスタートを進められるよう、あらかじめログインしておくことをお勧めします。
Auth0 は初めてですか? Auth0 の仕組みRegular Web Applications との統合方法、および使用されるプロトコルをご確認ください。

Auth0 を設定

アプリケーションキーを取得する

Auth0 へのサインアップ時に新しいアプリケーションが作成されますが、別途新しいアプリケーションを作成している場合もあります。Auth0 と通信するには、そのアプリケーションに関するいくつかの情報が必要です。これらの情報は、Auth0 Dashboard の Application Settings セクションで確認できます。
アプリケーションダッシュボード
次の情報が必要です。
  • ドメイン
  • クライアントID
  • クライアントシークレット
このページ上部からサンプルをダウンロードした場合、これらの情報はあらかじめ入力されています。

コールバック URL を設定する

コールバック URL とは、ユーザーが認証された後に Auth0 がアプリケーション内でリダイレクトする先の URL です。アプリケーションのコールバック URL は、Application SettingsAllowed Callback URLs フィールドに追加する必要があります。このフィールドが設定されていないと、ユーザーはアプリケーションにログインできず、エラーが発生します。
このページ上部からダウンロードしたサンプルプロジェクトに沿って進めている場合は、Allowed Callback URLs フィールドに追加するコールバック URL は http://127.0.0.1:3000/ です。

ログアウト URL を設定する

ログアウト URL は、ユーザーが認可サーバーからログアウトした後に Auth0 がリダイレクトできる、アプリケーション内の URL です。これは returnTo クエリパラメーターで指定します。アプリのログアウト URL は、Application SettingsAllowed Logout URLs フィールドに追加する必要があります。このフィールドが設定されていない場合、ユーザーはアプリケーションからログアウトできず、エラーになります。
このページ上部からダウンロードしたサンプルプロジェクトを使用している場合は、Allowed Logout URLs フィールドに追加するログアウト URL は http://127.0.0.1:3000 です。

PHP アプリケーションを統合する

PHP アプリケーションでユーザーを認証するサンプルアプリケーションを作成しましょう。ここでは、ドキュメント向けにシンプルな方法を採用します。より実践的で堅牢な例については、GitHub の Quickstart アプリも参照してください。

HTTP クライアントとメッセージファクトリのインストール

Auth0 PHP SDK は、アーキテクチャに応じた相互運用性を実現するために、多くの PHP-FIG 標準をサポートしています。特に重要なのが PSR-17PSR-18 です。これらの標準により、メッセージやリクエストを処理するネットワークコンポーネントを、必要に応じて自由に組み込めます。SDK で利用するには、互換性のあるライブラリをプロジェクトにインストールする必要があります。 PHP で最も広く使われているネットワークライブラリは Guzzle ですが、PHP コミュニティにはほかにも多くの選択肢があります。このサンプルアプリケーションでは Guzzle を使用します。先ほどと同様に、プロジェクトディレクトリで次のシェルコマンドを実行してください。
composer require guzzlehttp/guzzle guzzlehttp/psr7 http-interop/http-factory-guzzle

PHP SDK のインストール

Auth0 PHP SDK を使用するには、PHP の依存関係管理ツールである Composer が必要です。Composer を使うと、プロジェクトに必要な依存ライブラリを宣言し、それらをインストールできます。続行する前に、Composer がインストールされていて、シェルから利用できることを確認してください。 Auth0 PHP SDK をインストールするには、プロジェクトディレクトリで次のシェルコマンドを実行します。
composer require auth0/auth0-php
これにより、プロジェクト内に vendor フォルダーが作成され、Auth0 PHP SDK の使用に必要な依存関係がすべてダウンロードされます。また、サンプルで使用される vendor/autoload.php ファイルも作成され、このファイルによってアプリケーションの動作に必要なすべてのクラスが読み込まれます。SDK を動作させるには、このオートロードファイルをプロジェクト内で require することが重要です。

SDK の設定

まず、サンプルアプリケーションの設定を保存するため、プロジェクトディレクトリのルートに .env ファイルを作成し、環境変数を設定します。 PHP は .env ファイルを単体では読み取れないため、そのためのライブラリをインストールします。サンプルアプリケーションでは特定のライブラリを使用しますが、実際のアプリケーションでは任意の dotenv ローダーを利用できます。プロジェクトディレクトリで、次のシェルコマンドを実行してライブラリをインストールします。
composer require vlucas/phpdotenv
次に、これらのコードサンプルで使用する PHP ソースファイル index.php を作成し、サンプルアプリケーション向けに Auth0 PHP SDK のインスタンスを構成します。
<?php

// Composer AutoloaderをインポートしてSDKクラスを利用可能にする:
require 'vendor/autoload.php';

// .envファイルから環境変数を読み込む:
(Dotenv\Dotenv::createImmutable(__DIR__))->load();

// Auth0クラスを設定でインスタンス化する:
$auth0 = new \Auth0\SDK\Auth0([
    'domain' => $_ENV['AUTH0_DOMAIN'],
    'clientId' => $_ENV['AUTH0_CLIENT_ID'],
    'clientSecret' => $_ENV['AUTH0_CLIENT_SECRET'],
    'cookieSecret' => $_ENV['AUTH0_COOKIE_SECRET']
]);

アプリケーションのルートを設定する

最近の PHP アプリケーションでは、ルーティングによって受信した HTTP リクエストを処理用のコードに振り分け、ユーザーがアプリ内の特定の “ページ” にアクセスしたときに何を実行するかを決定します。アプリケーションにルーティングを実装する方法に唯一の正解はなく、実装に使用できるライブラリも数多くあります。このサンプルアプリケーションでは説明の都合上、特定のライブラリを使用しますが、実際のアプリケーションでは必要に応じて自由に選択してください。 プロジェクトディレクトリで、次のシェルコマンドを実行してルーティングライブラリをインストールします。
composer require steampixel/simple-php-router
次に、index.php を再び開いて、アプリケーションに処理を実装していきましょう。まず、ルーティングライブラリをインポートし、サンプルアプリケーション内のいくつかの箇所で参照できるよう、便宜上、各ルートの完全な URL を名前付き定数として定義します。
// 👆 上記の手順からの続きです。このコードを index.php ファイルに追記してください。

// ルーターライブラリをインポートする:
use Steampixel\Route;

// ルート定数を定義する:
define('ROUTE_URL_INDEX', rtrim($_ENV['AUTH0_BASE_URL'], '/'));
define('ROUTE_URL_LOGIN', ROUTE_URL_INDEX . '/login');
define('ROUTE_URL_CALLBACK', ROUTE_URL_INDEX . '/callback');
define('ROUTE_URL_LOGOUT', ROUTE_URL_INDEX . '/logout');
ここからは、アプリケーションのルート処理ロジックの追加と SDK の統合に進みます。

セッションの確認

Auth0 PHP SDK には、ユーザーが認証済みで、そのプロフィールが返されているかどうかを確認できる便利なメソッド getCredentials() があります。これを index ルートに追加し、ログインしていればユーザープロファイルを表示し、そうでなければログインが必要であることを示しましょう。
// 👆 上記の手順からの続きです。index.php ファイルに以下を追記してください。

Route::add('/', function() use ($auth0) {
  $session = $auth0->getCredentials();

  if ($session === null) {
    // ユーザーがログインしていません。
    echo '<p>Please <a href="/docs/login">log in</a>.</p>';
    return;
  }

  // ユーザーがログインしています。
  echo '<pre>';
  print_r($session->user);
  echo '</pre>';

  echo '<p>You can now <a href="/docs/logout">log out</a>.</p>';
});
user プロパティのレスポンス (配列) から、ユーザー プロファイルのすべてのプロパティにアクセスできます。たとえば、$session->user<a href="https://auth0.com/docs/users/user-profile-structure" target="_blank" rel="noreferrer">nickname を使ってユーザーのニックネームを取得したり、$session->useremail からメールアドレスを取得したりできます。この構造は正規化されたユーザー プロファイルです。詳しくは こちら を参照してください。 使用するソーシャル プロバイダーによってユーザー プロファイルの内容は異なるため、アプリケーション ロジックの中で特定の値が常に存在すると決めつけないことが重要です。たとえば、値が存在する場合もしない場合も適切に処理できるよう、isset や null 合体演算子などの PHP の言語機能を使用してください。
// ✋ これはサンプルアプリケーションに含める必要はありません。単なる例です。
$name = $session->user['name'] ?? $session->user['nickname'] ?? $session->user['email'] ?? 'Unknown';

ログイン

それでは、/login ルートを作成します。このルートでは、Auth0 PHP SDK の login() メソッドを使用してユーザーセッションを設定し、ユーザーをログインさせるための、Auth0 の Universal Login ページ向けにカスタマイズされた URL を返します。
// 👆 上記の手順から続きます。以下をindex.phpファイルに追記してください。

Route::add('/login', function() use ($auth0) {
    // ネットワーク障害などにより以前のログインプロセスが中断された場合の "invalid state" エラーを防ぐため、ログインのたびにユーザーセッションをリセットすることをお勧めします。
    $auth0->clear();

    // 最後に、ローカルアプリケーションのセッションを設定し、ユーザーを Auth0 Universal Login ページにリダイレクトして認証を行います。
    header("Location: " . $auth0->login(ROUTE_URL_CALLBACK));
    exit;
});

認証コールバックの処理

ユーザーが Auth0 の Universal Login ページでの認証を終えると、このステップで処理するコールバックルート /callback にあるサンプルアプリケーションに戻ります。 Auth0 がユーザーをアプリケーションに戻す際、HTTP リクエストのクエリには認証に必要ないくつかの重要なパラメーターが含まれます。Auth0 PHP SDK の exchange() メソッドがそれらの処理を担うため、認証フローの完了は簡単です。
// 👆 上記の手順からの続きです。以下をindex.phpファイルに追記してください。

Route::add('/callback', function() use ($auth0) {
    // SDKで認証フローを完了させます:
    $auth0->exchange(ROUTE_URL_CALLBACK);

    // 最後に、ユーザーのプロフィールを表示するため、/index ルートにリダイレクトします:
    header("Location: " . ROUTE_URL_INDEX);
    exit;
});

ログアウト

最後に、ユーザーのログアウトを適切に処理しましょう。Auth0 PHP SDK の logout() メソッドは、サンプルアプリケーションのセッションクッキーをクリアし、ユーザーを Auth0 の /logout endpoint にリダイレクトし (これにより、Auth0 のセッションレイヤーとすべての ID プロバイダーのセッションレイヤーからログアウトされます) 、その後ユーザーを / index ルートに戻します。
// 👆 上記の手順から続きます。以下をindex.phpファイルに追記してください。

Route::add('/logout', function() use ($auth0) {
    // アプリ内のユーザーのローカルセッションをクリアし、Auth0ログアウトエンドポイントにリダイレクトしてAuth0セッションをクリアします。
    header("Location: " . $auth0->logout(ROUTE_URL_INDEX));
    exit;
});

アプリを実行しましょう!

最後に、ルーティングミドルウェアが実際にリクエストをルーティングするよう設定します。
// 👆 上記の手順からの続きです。以下をindex.phpファイルに追記してください。

// ルートの設定が完了し、受信HTTPリクエストのルーティングを開始する準備ができたことをルーターに通知します。
Route::run('/');
以上です。新しいアプリケーションを実行する準備が整いました。もう一度、プロジェクトディレクトリで次のシェルコマンドを実行してください。
php -S 127.0.0.1:3000 index.php
ブラウザで http://127.0.0.1:3000 を開いて、試してみてください。