
ログインフロー
ほとんどの種類のアプリケーション (Webアプリ、シングルページアプリ、ネイティブアプリなど) では、ログイン認証にPKCEを使用した認可コードフローを使用してください。このフローでは、認可コードをトークンと交換します。PKCEを使用した認可コードフローは、バックエンドを持たないシングルページアプリで従来使用されていたインプリシットフローに代わるものです。最適なセキュリティを確保するため、新規開発では必ずこのフローを使用してください。また、インプリシットフローを使用している既存のアプリについても、PKCEで強化された認可コードフローへの移行を強く推奨します。
ユーザーがユーザー名とパスワードでログインする
この例では、ユーザーがユーザー名とパスワードを入力して手動でログインします。- Auth0のSDKがローカルセッションを作成し、ユーザーをAuth0の認可サーバー (
/authorizeエンドポイント) にリダイレクトします。 - 認可サーバーがセッションを作成し、ユーザーをログインおよび認可のプロンプトにリダイレクトします。
- ユーザーがユーザー名とパスワードで認証します。
- Auth0の認可サーバーは、先ほど作成したユーザーのセッションを更新し、ユーザーがログイン済みであることを記録します。
- 使用するフローに応じて、認可サーバーはIDトークンまたは認可コードを付けて、ユーザーをアプリケーションに戻します。
- アプリケーションがトークンまたは認可コードをアクセストークンと交換し、フローが完了します。
- ローカルセッション (storezero.io) :ユーザーが認証済みかどうかをアプリケーションに示します。
-
セッション (storezero.auth0.com) :ユーザーが認証済みかどうかをサーバーに示します。また、サーバーセッションでは、必要に応じて認証に関する詳細を追跡することもできます。
- たとえば、認可サーバーはユーザーが多要素認証 (MFA) を利用したかどうかを追跡できます。この情報をもとに、ユーザーが次回認可サーバーにアクセスした際に、ログインやMFAを求めるべきかどうかを判断できます。
ユーザーがIDプロバイダーでログインする
この例では、ユーザーはユーザー名とパスワードではなく、Facebookでログインすることを選択します。- Auth0のSDKがローカルセッションを作成し、ユーザーをAuth0の認可サーバー (
/authorizeエンドポイント) にリダイレクトします。 - 認可サーバーはセッションを作成してから、ユーザーをログインおよび認可のプロンプトにリダイレクトします。
- ユーザーがFacebookでのログインを選択すると、認可サーバーはユーザーをFacebookにリダイレクトします。
- Facebookはセッションを作成し、ユーザーを認証します。続いて、ユーザーがログイン済みであることを示すようにセッションを更新します。
- Facebookはユーザーを Auth0の認可サーバーに戻します。認可サーバーは、ユーザーがログイン済みであることを示すようにセッションを更新します。
- 認可サーバーは、使用するフローに応じてIDトークンまたは認可コードを付与し、ユーザーをアプリケーションに戻します。
- アプリケーションはトークンまたは認可コードをアクセストークンと交換し、フローを完了します。
SPAのセッション管理
前述の例では、ユーザーがいずれかのログインフローを開始すると、ローカルセッションが作成されます。このローカルセッションによって、ユーザーのログイン状態を維持し、再認証が必要になるタイミングを判断できます。 ただし、シングルページアプリ (SPA) のようにバックエンドを持たないアプリケーションでは、ローカルセッションを利用できません。こうしたアプリケーションでは、代わりにサイレント認証と呼ばれる別の手法でユーザーのログイン状態を維持します。 サイレント認証では、認可サーバー上のセッションを使用して、ユーザーに再認証が必要なタイミングを判断します。非表示のiframeが、prompt=noneパラメーターを付けて認証リクエストを認可サーバーにリダイレクトします。このパラメーターを指定すると、サーバーはユーザーに入力を求めません。
- 認可サーバー上のセッションが有効期限内であれば、取引はシームレスに続行されます。サーバーは、
postMessageを利用するWMRM (Web Message Response Mode) を通じてを送信します。 - 認可サーバー上のセッションが期限切れになっている場合や、ユーザーがログアウトした場合は、iframe内のリダイレクトがエラーを返します。この場合、アプリケーションはユーザーを認可サーバーに誘導し、再認証させる必要があります。