Skip to main content
Auth0 には、アプリケーション向けに、 (IdP) 開始の レスポンスを Connect (OIDC) レスポンスに変換する方法が用意されています。 OIDCプロトコルはIdP開始の認証フローをサポートしていませんが、この方法を使えば、Implicit Flow with Form Post を利用して、IdP開始の認証フローをシミュレートできます。
ログインフローはIdPではなくOIDCアプリケーション側で開始することを強くおすすめします。詳しくは、Configure SAML Identity Provider-Initiated Single Sign-On を参照してください。
この方法を実装するには、次の作業が必要です。
  • アプリケーションにカスタムログインルートハンドラーを追加します。
  • SAML 接続を次のように更新します。
    1. 受信したIdP開始のSAMLレスポンスを受け入れる。
    2. サービスプロバイダー開始の認証リクエストを送信するデフォルトのアプリケーションにリダイレクトする。

仕組み

Identity Provider 開始の SAML サインインから OIDC アプリケーションへのフロー図
  1. ユーザーが SAML IdP のログイン エンドポイントにアクセスします。
  2. SAML IdP がログインページを返します。
  3. ユーザーが SAML IdP に資格情報を送信します。
  4. SAML IdP はユーザーのセッションを作成し、Form Post と SAML レスポンスを含む HTML ページを返します。
  5. ページは HTTP POST 呼び出しによって、SAML レスポンスを Auth0 テナントに自動送信します。
  6. Auth0 テナントは、ID トークンを URL フラグメントとして付与し、ユーザーのブラウザーを OIDC アプリケーションのカスタム ログイン ルート ハンドラーにリダイレクトします。
  7. ブラウザーは、connection パラメーターと ID トークンを付けて、OIDC アプリケーションのカスタム ログイン ルート ハンドラーを呼び出します。
  8. OIDC アプリケーションは ID トークンを無視し、connection パラメーターを解析してセッション用の state パラメーターを作成した後、ユーザーのブラウザーを Auth0 テナントの /authorize エンドポイントにリダイレクトします。
  9. ブラウザーは、指定された connection パラメーターと state パラメーターを付けて、Auth0 テナントの /authorize エンドポイントを呼び出します。
  10. Auth0 テナントは SAML ログイン リクエストを生成し、ユーザーのブラウザーを SAML IdP のログイン エンドポイントにリダイレクトします。
  11. ブラウザーは SAML ログイン リクエストを SAML IdP のログイン エンドポイントに送信します。
  12. SAML IdP はユーザーのセッションを見つけると、Form Post と SAML レスポンスを含む HTML ページを返します。
  13. ページは HTTP POST 呼び出しによって、SAML レスポンスを Auth0 テナントに自動送信します。
  14. Auth0 テナントは、ユーザーのブラウザーをアプリケーションのログイン ルート ハンドラーにリダイレクトします。
  15. ブラウザーは、指定された state パラメーターと ID トークンを付けて、アプリケーションのログイン ルート ハンドラーを呼び出します。
  16. OIDC アプリケーションは state パラメーターを検証し、ID トークンを解析して、ユーザーのアプリケーションセッションを作成します。

カスタムログインルートハンドラーを作成する

カスタムログインルートハンドラーは、アプリケーションのログインメソッドを呼び出します。このハンドラーは connection パラメーターを受け取り、それを Auth0 テナントに送信する認証リクエストに含める必要があります。 カスタムログインルートハンドラーは、標準のログインルートハンドラーとは別のエンドポイントに関連付けることをおすすめします。たとえば、標準のログインルートハンドラーが /login エンドポイントに関連付けられている場合は、カスタムログインルートハンドラーを /startlogin エンドポイントに関連付けることができます。
認証の処理に Auth0 SDK を使用していない場合は、CSRF 攻撃から保護するために、アプリケーションのログインメソッドが /authorize エンドポイントに state パラメーター値を渡し、IDプロバイダーからのレスポンスに含まれる state パラメーターを検証するようにする必要があります。詳しくは、OAuth 2.0 の state パラメータで攻撃を防ぎ、ユーザーをリダイレクトするを参照してください。

Auth0 Single Page App SDK を使用している場合は、カスタムログインルートハンドラーを追加し、次のように login メソッドを更新して connection パラメーターに対応させることができます。

クエリ文字列を作成する

クエリ文字列には redirect_uri パラメーターが含まれます。このパラメーターの値は URL エンコードする必要があり、次の要素で構成されます。
  1. カスタムログインルートハンドラーに対応するアプリケーションのエンドポイント。
  2. SAML 接続名を値として指定した connection パラメーター。

アプリケーションのエンドポイントが https://exampleco.com/startlogin で、SAML接続の名前が my-saml-connection の場合、クエリ文字列は redirect_uri=https%3A%2F%2Fexampleco.com%2Fstartlogin%3Fconnection%3Dmy-saml-connection になります。

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

  1. Auth0 Dashboard > アプリケーション > アプリケーション に移動します。
  2. Auth0 で OIDC アプリケーションを表す新しいアプリケーションを作成します。
  3. Allowed Callback URLs を更新し、カスタムログインルートハンドラーに関連付けられたアプリケーションのエンドポイントを追加します。

接続を設定する

  1. Auth0 Dashboard > Authentication > Enterprise > SAML に移動します。
  2. 新しい SAML 接続を作成します。
  3. IdP-Initiated SSO ビューに切り替えます。
  4. Accept Requests を選択します。
  5. Default Application で、先ほど作成したアプリケーションを選択します。
  6. Response ProtocolOpenID Connect を選択します。
  7. クエリ文字列 に、先ほど作成したクエリ文字列を入力します。

詳しく見る