Auth0\SDK\API\Authentication クラスが用意されており、これを使って Authentication API に直接アクセスするためのメソッドを利用できます。なお、このインターフェースはより高度なアプリケーション向けで、通常はユーザーのセッションを管理する機能は備えていません。ほとんどのユースケースでは、Auth0 base class を使用することをおすすめします。
この記事では、一般的な認証操作の例を紹介します。
前提条件
以下のドキュメントは、Installation と Getting started セクションの手順を完了し、そこで示されているコードの続きから進めることを前提としています。認可コードフロー
認可コードフローは、ユーザーにアプリケーションへのアクセスを許可するための基本的な方法です。このフローは、Manage Login, ログアウト, and User Profilesページで使用されているものと同じです。ログインやコールバックの処理をより細かく制御する必要がある場合は、このセクションで Authentication API を直接使用する方法を説明します。 認可コードを生成するには、ユーザーが Auth0 で認証される必要があります。これは、テナントのドメインにある/authorize エンドポイントにリダイレクトすることで行われます。次のコードは、認証が必要なページに表示されます。
- カスタムのセッションハンドラーに、認証済みユーザーの状態が保存されているかどうかを確認します。ユーザーセッションの扱い方は、アプリケーションによって異なる場合があります。
- セッションがない場合は、ユーザーを Universal Login Page にリダイレクトしてログインさせる必要があります。
- ログインリクエストで state 値を設定し、
codeがコールバック URL に返されたときにその値を検証します。これは PHP セッション内の ‘state’ キーに保存しています。 getLoginLink()の呼び出しでは、適切なレスポンスタイプ (この場合はcode) 、リダイレクト URI (アプリケーションでレスポンスを処理する場所。詳細は後述) 、および state (上記で設定した値) を含む正しい/authorizeリンクを構築します。- その後、この URL にリダイレクトし、ユーザーがこちらへリダイレクトされて戻ってくるのを待ちます。
- リクエストクエリに
codeパラメータがあるか確認します。見つからなければ、認証を中止します。 state値が存在すること、およびそれがこちらで生成したものと一致することを確認します。これは CSRF 攻撃を防ぐために重要です。codeExchange()呼び出しでコード交換を試みます。このとき、Auth0 が認証中のユーザーをアプリケーションに返した際に渡されたcodeを必ず渡します。- これに成功すれば、交換が正常に完了し、ID トークンやアクセストークンなどの値を取得できたことがわかります。
- ID トークンを検証し、そのクレームをユーザーの識別情報として使用します。
- この最後の手順も成功したら、ユーザー情報を保存し、機密データの画面にリダイレクトします。
クライアント認証情報フロー
クライアント認証情報フロー では、Auth0 Dashboard で設定したスコープに基づいて、アプリケーションに特定の API へのアクセス権を付与できます。これにより、たとえばアプリケーションから を呼び出せます。認証が成功すると、リクエストした API 用の が発行されます。 まず、アプリケーション Settings ページの Advanced settings > Grant Types タブで Client Credentials グラントを有効にします。 次に、API の Settings ページにある Machine to Machine Applications タブで、使用する API に対してアプリケーションを認可します。必要なスコープのみをすべて選択して Update をクリックします。次に Settings タブに戻って Identifier の値をコピーします。この値は.env ファイルの AUTH0_MANAGEMENT_AUDIENCE キーに追加する必要があります。
以下の例を使用して、API の アクセストークン をリクエストします。
シングルサインオンのログアウト
session_destroy() でローカルセッションを破棄すれば、ユーザーをアプリケーションからログアウトさせるには十分ですが、Auth0 上のエンドユーザーのセッションも終了させる必要があります。これにより、次回ユーザーに Auth0 のログインフォームが表示されたとき、ログインするには資格情報の入力が必要になります。
まず、ログアウト完了後にユーザーの遷移先とする場所を決めます。これを Auth0 アプリケーションの設定にある “Allowed Logout URLs” フィールドに保存します。また、この URL を値として AUTH0_LOGOUT_RETURN_URL キーを .env ファイルに追加します。
次のコードをアプリケーションのログアウトコードに追加します: