メインコンテンツへスキップ
フェデレーションの設定手順の多くは、サービスプロバイダー主導で開始される (SSO) を前提としています。サービスプロバイダーは、認証のためにユーザーを (IdP) にリダイレクトします。このプロセスは、一般にコンシューマー向けのシナリオで使用されます。 ただし、エンタープライズのシナリオでは、サービスプロバイダーではなく IdP が SSO を開始する形で始めることもよくあります。たとえば、企業では、ユーザーがポータルにサインオンした後に適切なアプリケーションへ移動できるよう、ポータルを設定する場合があります。

リスクと留意事項

IdP 起点フローにはセキュリティリスクがあるため、推奨されません。可能な限り SP 起点フローを使用することを推奨します。 IdP 起点の SSO を有効にする前に、リスクを十分に理解してください。このシナリオでは、Auth0 は IdP から要求していないレスポンスを受け取り、アプリケーションは Auth0 から要求していないレスポンスを受け取ります。どちらも、ユーザー自身がフローを開始したことを検証できません。そのため、このフローを有効にすると、攻撃者が正当なユーザーをだまして、攻撃者の ID でそのアプリケーションに気付かないうちにログインさせる ログイン CSRF 攻撃 が発生する可能性があります。

OpenID Connect IdP 起点フロー

Connect (OIDC) は、IdP 起点フローの概念をサポートしていません。そのため、Auth0 では SAML の IdP 起点フロー (SAML 接続から開始されるフロー) をアプリケーション向けの OIDC レスポンスに変換できますが、OIDC/OAuth2 プロトコルを適切に実装しているアプリケーションは、要求していないレスポンスを拒否します。 OIDC アプリケーションを使用する場合は、アプリケーションにログインエンドポイントを作成するのが最適です。このエンドポイントの目的は、IdP (Auth0 テナント) へのリダイレクトを開始することだけです。 複数の IdP を使用している場合は、ログインエンドポイントを IDプロバイダーごとに専用にするか、どの IdP がワークフローを開始するかを識別するためのパラメーターを受け取れるようにしてください。 別の方法として、ユーザーがアプリケーション側からログインフローを開始するようにすることもできます。

ポストバックURL

IdP起点 SSO を使用する場合は、ポストバックURLに必ず connection パラメーターを含めてください。 組織 機能を使用している場合は、必要に応じて、対象の組織の組織IDを含む organization パラメーターを指定できます。
ユーザーがこの方法でログインできるようにするには、その接続を組織で有効にする必要があります。さらに、有効にした接続に対して自動メンバーシップを設定するか、ユーザーがその組織のメンバーであることを確認する必要があります。

Lock/Auth0.js

アプリケーションがシングルページアプリケーションで、認証結果の処理に Lock または Auth0.js を使用している場合は、IdP 起点フローを許可し、その結果としてアプリケーションが Login CSRF 攻撃を受ける可能性があることを明示的に指定する必要があります。 Auth0.js を使用している場合は、ライブラリの webAuth.parseHash を更新し、フラグ __enableIdPInitiatedLogintrue に設定する必要があります。
var data = webAuth.parseHash(
      {
        ...
        __enableIdPInitiatedLogin: true
        ...
      }
Lock を使用している場合は、コンストラクターに渡す options パラメーターにこのフラグを含めることができます。 const lock = new Auth0Lock(clientID, domain, options) フラグは次のとおりです。 var options = { _enableIdPInitiatedLogin: true }; enableIdPInitiatedLogin フラグは、Lock で使用する場合は先頭にアンダースコアが 1 つ付き、auth0.js ライブラリで使用する場合は 2 つ付きます。

IdP起点の SSO を設定する

  1. Dashboard > Authentication > Enterprise に移動し、SAMLP Identity Provider を選択します。
  2. Settings で、IdP起点 SSO の設定を確認できます。
    プロトコルの IdP起点 SSO 設定画面
  • IdP-initiated SSO Behavior: このオプションでは、SAML 接続に対して IdP起点ログインを有効にできます。Accept Requests を選択し、必要なフィールドをすべて入力します。
  • Default Application: IdP起点ログインが成功すると、ユーザーはこのアプリケーションに遷移します。この設定には、この接続で有効なアプリケーションが表示されます。ユーザーが IdP起点でログインする先のアプリケーションをドロップダウンから選択します。SAML 接続ごとに、IdP起点ログイン用に選択できるアプリケーションは 1 つだけです。
  • Response Protocol: これは、選択した Default Application への接続に使用されるプロトコルです。通常、アプリケーションは OpenID Connect プロトコルで設定されます (上記を参照) 。ただし、アプリケーションに SAML2 Web App アドオンを設定していて、SAML アサーションをルーティングしたい場合は、SAML を選択する必要があります。有効な SAML Assertion が postback URL に渡されると、Auth0 は、設定されたデフォルトアプリケーションの最初の Allowed Callback URL に対して、選択したレスポンスプロトコルを使用してログインレスポンスを送信します。OIDC を使用している場合は、クエリ文字列フィールドで redirect_uri を指定することで、送信先を変更できます。
    • アプリケーションに設定されたコールバック URL に Multiple Custom Domains (MCD) プレースホルダーが含まれている場合、システムは、IdP からの最初のリクエストを受信した postback URL のカスタムドメインに対応するメタデータ値を使って、そのプレースホルダーを動的に埋めます。詳細については、Multiple Custom Domains を参照してください。
  • Query String: OpenID Connect プロトコルを使用する場合は、クエリ文字列オプションで動作をカスタマイズできます。query string でパラメーターを設定するのと同様に、複数のオプションを指定できます。設定できる項目は次のとおりです。
SettingDescription
redirect_uriIdP起点ログインが完了すると、リクエストはアプリケーションの Allowed Callback URLs に最初に記載されている URL にリダイレクトされます。ただし、redirect_uri を設定すると、IdP はこの URL にリダイレクトします。これにより、ワイルドカードを含むサブドメイン構成を使用していて、特定の 1 つのサブドメインにのみリダイレクトしたい場合などにも柔軟に対応できます。
scope送信される IDトークン のスコープを定義します。複数のスコープを設定できます。
response_typeSPA の Implicit Grant Flow では token を設定します。通常の Web アプリの Authorization Code Grant Flow では code を設定できます。
IdP起点フローでは、コールバック URL が未検証ドメインである場合、Auth0 サーバーはトークン内のスコープを取り除きます。Auth0 では、未検証ドメインとして localhost127.0.0.1 のみを定義しています。コールバック URL にこれらのいずれかを使用すると、/userinfo エンドポイントからのトークンは空のレスポンスを返します。要求したスコープを含むトークンレスポンスを取得するには、検証済みドメインを使用してください。
クエリ文字列の例: redirect_uri=https://jwt.io&scope=openid email&response_type=token

アプリケーションのドロップダウンリストは100件に制限されています

IdP 起点の SSO で デフォルトアプリケーション としてアプリケーションを選択する場合、そのアプリケーションがテナントのドロップダウンリストに表示される最初の100件に含まれていなければ、 を使用してそのアプリケーションを選択する必要があります。PATCH を実行する必要があります:
{
"options": {
"signInEndpoint": "yourIdpSignInUrl",
"idpinitiated": {
"client_id": "yourClientId",
"client_protocol": "saml",
"client_authorizequery": ""
},
"signingCert": "[copied-from-GET]"
}
}

詳しく見る