1. Sitecoreのアイデンティティ

Sitecore認証動作の変更について

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Sitecore Identity (SI) は、Sitecore 9.0で導入されたフェデレーション認証機能を使用します。これらの機能は、OWIN認証ミドルウェアに基づいています。ただし、Sitecore 9.0では、OWIN認証の統合とフェデレーション認証の両方がデフォルトで無効になっています。

Sitecore 9.1以降では、Sitecore Identityはデフォルトで有効になっています。OWIN認証とフェデレーション認証もSIで必要であるため、有効になっています。

このトピックでは、Sitecore認証動作の変更について説明し、次の方法について説明します。

認証スコープの構成

デフォルトでは、SitecoreはSIサーバー プロバイダーをSitecoreクライアント サイトの認証 ( shelladminなど) のみに処理するように設定します。これは、SIサーバーを介してshell認証する場合、websiteそのユーザーを受け入れず、Webサイトでは匿名であることを意味します。また、GetSignInUrlInfoPipelineパイプラインを使用してWebサイトにサインイン リンクを生成する場合、SIサーバーでサインインするためのログイン リンクが予期せずそこに表示されないことも意味します。

認証スコープを設定するには:

  • sitecore/federatedAuthentication/identityProvidersPerSites/ノードの下のmapEntryノードで、許可するサイトとIDプロバイダーの組み合わせを指定します。

Sitecoreには、事前定義されたサイト リストを持ついくつかのmapEntryノードが付属しています。すべてのノードには、意味のある値を持つname属性があります。

  • すべてのサイト

  • Webデータベースがあるサイト

  • コアデータベースと未指定のデータベースを持つサイト

  • エクストラネットドメインを持つサイト

  • 管理サイト

メモ

これらの事前定義済mapEntryノードは動的になるように作成されており、独自のmapEntryのmapEntry/sitesセクションで特別な式を使用する能力を示しています。詳細については、Config.Authentication.Owin.Authentication.configファイルを確認してください。

デフォルトでは、SIサーバー・プロバイダーはsites with the core and unspecified database mapEntry ノードに配置されます。

新しいログイン ページURLでSitecoreにアクセス

SIより前は、/sitecore/login URLと /sitecore/admin/login.aspx URLを使用して、それぞれshellサイトとadminサイトにログインしていました。これらのURLはSitecore Identityでは使用されません。

Sitecoreへのアクセスには/sitecore URLまたはURL /sitecore/adminを使用し、Logoutボタンを使用してサインアウトまたは別のユーザーに変更することをお勧めします。

Sitecoreフェデレーション認証は、Sitecoreがユーザーを外部IDプロバイダーのログイン ページ (Sitecoreにログイン ページを表示せずに) にリダイレクトし、ユーザーが対応するボタンをクリックするまで待機できるようにする新しいログイン ページ エンドポイントを提供します。

この新しいログインエンドポイントのURLの形式は、$(loginPath)/{site_name}/{identity_provider}/{inner_identity_provider}です。

  • $(loginPath) は構成変数 ($(identityProcessingPathPrefix)login = /identity/login) です。

  • {site_name}は、loginPage属性値が設定されているsiteノードのname属性値です。

  • {identity_provider} は、ユーザーのリダイレクト先のログイン・ページのIDプロバイダーの名前です。

  • {inner_identity_provider} はオプションです。 これは、identity_provider内の内部プロバイダーの名前です。この値を設定すると、ユーザーはすぐにinner_identity_providerログインページに直接リダイレクトされます。

    手記

    inner_identity_providerIDプロバイダーは、acr_value = idp:inner_identity_providerとしてidentity_providerIDプロバイダーに送信されます。したがって、identity_providerIDプロバイダーはacr_valueをサポートする必要があります。

SIサーバー プロバイダーはSitecoreのSitecoreIdentityServer名で設定され、Sitecore.Owin.Authentication.IdentityServer.configファイルには次のものが含まれます。

<sites>
  <site name="shell" set:loginPage="$(loginPath)shell/SitecoreIdentityServer"/>
  <site name="admin" set:loginPage="$(loginPath)admin/SitecoreIdentityServer"/>
</sites>
手記

クロスオリジンの問題を防ぐために、サイトのloginPage属性値に相対URLが含まれていることを確認する必要があります。

/identity/login/…エンドポイントは、GetSignInUrlInfoPipelineパイプラインを内部的に使用して、選択した外部プロバイダーへの適切なサインイン リンクを生成し、必要なすべてのデータを渡します。このログイン ページ形式は、siteノードとGetSignInUrlInfoPipelineパイプラインのloginPage属性にのみ使用して、プレゼンテーション レイヤーの特定のサイトの外部サインインURLを取得します。

/sitecore/loginページを取り戻す

Sitecore 9.0では、以前に設定した外部IDプロバイダーのログイン ボタンを元に戻すことができます。

Sitecore.Owin.Authentication.IdentityServer.config設定ファイルは、shellサイトとadminサイトのloginPage属性を、Sitecoreが処理する新しい特別なエンドポイントにパッチします。

SIが有効になっているときに /sitecore/loginページにアクセスしようとすると、shellサイトで指定されたログイン ページにリダイレクトされます (同じページでない限り)。

手記

この動作は、InterceptLegacyShellLoginPageプロセッサが担当します。

SIサーバーに到達できず、Sitecoreが初期メタデータを取得できない場合、ユーザーは /sitecore/login?fbc=1ページに移動します。

手記

IdentityProviderIsInaccessibleプロセッサとその構成を確認します。

フェデレーション認証を使用してshellでユーザーをサインインするように外部IDプロバイダーを既に構成している場合でも、SIサーバーのログイン ページにはこれらの追加のログイン ボタンが表示されないため、/sitecore/loginページを使用する必要があります。

手記

外部IDプロバイダーをSIサーバーに追加する場合は、フェデレーション ゲートウェイを参照してください。

Sitecoreがユーザーをsitecore/loginページからリダイレクトしないようにするには、次の手順に従います。

  1. shellログインページにパッチを適用して/sitecore/loginに戻すか、追加のURLパラメータ(?fbc=1)を使用して/sitecore/loginをリクエストします。

  2. または、InterceptLegacyShellLoginPageプロセッサのlegacyShellLoginPageプロパティをランダムな値にパッチします。

これらのアクションのいずれかにより、Sitecoreはユーザーを /sitecore/loginページからリダイレクトできなくなります。SIサーバーはSitecoreで通常の外部IDプロバイダーとして設定されているため、/sitecore/loginページにサインイン ボタンが表示されます。キャプションはGo to loginです。

Sitecore Identityの無効化

SitecoreインスタンスはSIクライアントですが、9.1より前のバージョンと同様に、SIサーバーなしでSitecoreが動作するようにSIを無効にすることができます。

デフォルトでは、Sitecoreインスタンスが起動後の最初のサインイン時にSIサーバーに到達できない場合、/sitecore/loginページをログイン ページのフォールバックとして使用します。

手記

認証フォールバックが発生した場合でも、OWIN認証ミドルウェアはOwin.Authentication.Enabled設定によって有効になっているため、引き続き使用されます。

SIサーバーをまったく使用しないには:

  • この設定ファイルをアクティブにします:\App_Config\Include\Examples\Sitecore.Owin.Authentication.IdentityServer.Disabler.config.example.このファイルでは、次のことを行います。

    • SitecoreIdentityServerプロバイダーのEnabledプロパティをfalseに設定します。

      手記

      sitecore/federatedAuthentication/identityProvidersで設定されたすべての外部IDプロバイダーには、Sitecoreへの個々のIDプロバイダーの登録を無効にするために使用するEnabledプロパティがあります。

    • shellサイトとadminサイトのloginPage属性を初期値 (/sitecore/login/sitecore/admin/login.aspx) にパッチします。

OWIN認証とフェデレーション認証を無効にするには:

  • この設定ファイルをアクティブにします:\App_Config\Include\Examples\Sitecore.Owin.Authentication.Disabler.config.example.このファイルでは、次の処理が行われます。

    • Owin.Authentication.EnabledFederatedAuthentication.Enabledをfalseに設定します。

    • shellサイトとadminサイトのloginPage属性を初期値 (/sitecore/login/sitecore/admin/login.aspx) にパッチします。

  • この設定をweb.configファイルに追加します。

    <add key="owin:AutomaticAppStartup" value="false" />
  • web.configファイル内の元の認証ノードを復元します。

    <authentication mode="Forms">
          <forms name=".ASPXAUTH" cookieless="UseCookies" />
    </authentication>

ユーザーのサインアウトを実装する

フェデレーション認証はSitecore 9.1で拡張されました。ユーザーがSitecoreからサインアウトするときに、外部IDプロバイダーからのサインアウトを実装する方が簡単です。

ユーザーが外部IDプロバイダーからサインアウトすると、Sitecore IdentityはユーザーをこのIDプロバイダーのログアウト ページにリダイレクトし、その後Sitecoreに戻します。Sitecoreと基になるIDプロバイダーの両方からの完全なサインアウトは、通常、1つのリクエストでは発生しません。ただし、Sitecore Identityは、AuthenticationManager.Logout() メソッドを使用するとすべてを自動的に処理します。

この機能は、SIサーバー プロバイダー (構成のSitecoreIdentityServer) onlyデフォルトでオンになっています (sitecore/federatedAuthentication/identityProviders/identityProviderid=SitecoreIdentityServer/triggerExternalSignOutはデフォルトでtrueです)。

大事な

この機能を使用するには、認証ミドルウェアでIDプロバイダーのpostLogoutRedirectUriを正しく構成し、IDプロバイダー自体でpostLogoutRedirectUriを許可する必要があります。Sitecoreはこれに依存して、外部サインアウトが発生していることを確認します。 postLogoutRedirectUriを正しく設定しないと、ユーザーはサインアウト後にSitecoreにアクセスしようとするたびに、外部プロバイダーのサインアウト ページにリダイレクトされます。ユーザーは1分待つか、SitecoreのCookieをクリーンアップしてこれを回避できます。

ユーザーロックアウトの設定

ユーザー アカウントのロックアウトは、ブルート フォース攻撃と呼ばれるパスワード推測攻撃を回避するのに役立ちます。ブルートフォース攻撃とは、文字、数字、記号の可能なすべての組み合わせを体系的に試して、機能する正しい組み合わせが見つかるまでパスワードを発見する試みです。

ユーザーアカウントのロックアウトを設定するには:

  1. MaxInvalidPasswordAttemptsPasswordAttemptWindowSitecore:IdentityServer:SitecoreMembershipOptions:MaxInvalidPasswordAttemptsSitecore:IdentityServer:SitecoreMembershipOptions:PasswordAttemptWindowの設定で構成します。

  2. または、SitecoreインスタンスのWeb.configファイルでMaxInvalidPasswordAttemptsPasswordAttemptWindowを指定します。これは、Sitecore Identityサーバーが無効になっているか、identityServer.xmlのパスワード ポリシー パラメーターが指定されていない場合にのみ機能します。

大事な

組織外のSIサーバーのルートhttps://{si_server}/ URLとhttps://{si_server}/account/login URLへのアクセスを制限する必要があります。

認証Cookieの有効期間を指定する

Cookieには次の2つのタイプがあります。

  • セッションCookie (非永続的) - これらは一時的なCookieファイルです。ブラウザを閉じると消去されます。

  • Persistent cookies - ブラウザは、これらのCookieファイルを手動で削除するか、永続Cookieファイル自体で指定された有効期間に基づいてブラウザが削除するまで、これらのCookieファイルを保存します。

最新のブラウザーは、適切なブラウザー オプションがオンになっている場合、ブラウザー セッション間でセッションCookieを保持する傾向があります。多くの場合、セッションCookieは永続的なCookieのように動作します。OWIN認証を使用すると、Cookieの有効期間の値をCookie値自体に格納できます。これは、Cookieの有効期限が切れている場合、WebアプリケーションによってCookieが期限切れとして扱われますが、ブラウザはまだCookieをサーバーに送信します。

認証Cookieの有効期間を指定するには:

  • 次のパッチ スニペットを使用して、デフォルトのCookieの有効期間を指定し、スライディング有効期限を有効または無効にします。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <sitecore>
        <pipelines>
          <owin.initialize>
            <processor name="CookieAuthentication">
              <!-- Controls how much time the cookie will remain valid from the point it is created.
                 Format: d:hh:mm:ss
    
                 No matter the cookie is persistent or not, OWIN authentication will not pass the expired cookie.
                 ExpireTimeSpan could be overwritten by the http://www.sitecore.net/identity/claims/cookieExp claim where
                 the claim value is Unix time expressed as the number of seconds that have elapsed since 1970-01-01T00:00:00Z. -->
              <ExpireTimeSpan>00:30:00</ExpireTimeSpan>
              <SlidingExpiration>true</SlidingExpiration>
            </processor>
            ...

Webアプリケーションは、ユーザーがRemember meオプションを選択すると、永続的な認証Cookieを作成します。フェデレーション認証による認証では、非永続的なCookieのみが生成されます。

たとえば、外部IDプロバイダーでRemember meオプションを選択せずにサインインした場合、ブラウザー セッションの有効期限が切れた後に再度サインインする必要があります。

外部IDプロバイダーを通じてサインインし、そのプロバイダーでRemember meオプションを選択した場合、ブラウザー セッションの有効期限が切れると、Sitecore認証Cookieは失われます。 ただし、IDプロバイダーにすばやく自動リダイレクトして戻すと、自動的にSitecoreに再度サインインします。

特定のIDプロバイダーのCookie ExpireTimeSpan設定を上書きするには:

  • UTCで測定された1970-01-01T0:0:0Zから日付/時刻までの秒数を指定する値を持つhttp://www.sitecore.net/identity/claims/cookieExp要求を追加するIDプロバイダーの要求変換を指定します。

この値は、認証Cookieをブラウザによる処理に受け入れてはならない時間またはそれ以降に示します。

Sitecoreは、この目的のためにSitecore Identityサーバー プロバイダーのexpクレーム値を使用します - Config.Authentication.IdentityServer.Owin.Authentication.IdentityServer.configファイルを参照してください。

<sitecore>
  <federatedAuthentication>
    <identityProviders>
      <identityProvider id="SitecoreIdentityServer"  ...>
        <transformations ...>
            <!-- owin.cookieAuthentication.signIn pipeline uses http://www.sitecore.net/identity/claims/cookieExp claim to override authentication cookie expiration.
                 'exp' claim value can be configured on Sitecore Identity server on the client configuration by IdentityTokenLifetimeInSeconds setting.
                 Note: Claim value is Unix time expressed as the number of seconds that have elapsed since 1970-01-01T00:00:00Z -->
            <transformation name="use exp claim for authentication cookie expiration" type="Sitecore.Owin.Authentication.Services.DefaultTransformation, Sitecore.Owin.Authentication">
              <sources hint="raw:AddSource">
                <claim name="exp"/>
              </sources>
              <targets hint="raw:AddTarget">
                <claim name="http://www.sitecore.net/identity/claims/cookieExp"/>
              </targets>
              <keepSource>true</keepSource>
            </transformation>
この記事を改善するための提案がある場合は、 お知らせください!