Sitecore 認証動作の変更を理解する

Current version: 10.1

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

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

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

認証範囲の設定

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

認証範囲を設定するには、次の手順に従います。

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

Sitecore には、定義済みのサイトのリストを持つ複数の mapEntry ノードがあります。すべてのノードには、次のように意味のある値を持つ name 属性があります。

  • すべてのサイト

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

  • core データベースと未指定のデータベースがあるサイト

  • エクストラネット ドメインのあるサイト

  • 管理サイト

注記

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

既定では、SI サーバー プロバイダーは core データベースと未指定のデータベースの mapEntry ノードがあるサイトに配置されます。

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

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

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

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_provider ID プロバイダーは acr_value=idp:inner_identity_provider であるため、identity_provider ID プロバイダーに送信されます。したがって、identity_provider IDプロバイダーは acr_value をサポートする必要があります。

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

RequestResponse

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

注記

ユーザーは、オリジン間の問題を防ぐための相対 URL がサイトの loginPage 属性値に含まれることを確認する必要があります。

/identity/login/… エンドポイントは、内部で GetSignInUrlInfoPipeline パイプラインを使用して、選択した外部プロバイダーへの適切なサインイン リンクを生成し、必要なすべてのデータをプロバイダーに渡します。site ノードの loginPage 属性および GetSignInUrlInfoPipeline パイプラインのみにこのログイン ページ形式を使用して、プレゼンテーション層の特定のサイトの外部サインイン 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 ページを使用する必要があります。

注記

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

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

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

  2. または、InterceptLegacyShellLoginPage プロセッサの legacyShellLoginPage プロパティにパッチを適用して無作為の値にします。 

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

Sitecore Identity を無効にする

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

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

注記

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

SI サーバーをまったく使用しないようにするには、次の手順に従います。

  • この設定ファイル \App_Config\Include\Examples\Sitecore.Owin.Authentication.IdentityServer.Disabler.config.example をアクティブ化します。このファイルによって、以下が実行されます。

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

      注記

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

    • shell および admin サイトの loginPage 属性にパッチを適用して、初期値 (/sitecore/login および /sitecore/admin/login.aspx) にします。

OWIN およびフェデレーション認証を無効にするには、次の手順に従います。

  • この設定ファイル \App_Config\Include\Examples\Sitecore.Owin.Authentication.Disabler.config.example をアクティブ化します。このファイルによって、以下が実行されます。

    • Owin.Authentication.Enabled および FederatedAuthentication.Enabled を false に設定します

    • shell および admin サイトの loginPage 属性にパッチを適用して、初期値 (/sitecore/login および /sitecore/admin/login.aspx) にします。

  • この設定を web.config ファイルに次のように適用します。

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

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

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

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

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

この機能は、SI サーバー プロバイダーの場合のみ既定でオンになっています (設定の SitecoreIdentityServer)。sitecore/federatedAuthentication/identityProviders/identityProvider[id=SitecoreIdentityServer]/triggerExternalSignOut は既定で true です。

重要

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

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

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

ユーザー アカウントのロックアウトを設定するには、次の手順に従います。

  1. Sitecore:IdentityServer:SitecoreMembershipOptions:MaxInvalidPasswordAttempts および Sitecore:IdentityServer:SitecoreMembershipOptions:PasswordAttemptWindow 設定で、MaxInvalidPasswordAttempts および PasswordAttemptWindow を設定します。

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

重要

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

以下の 2 種類の Cookie があります。

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

  • 永続的な Cookie - 永続的な Cookie のファイル自体に指定されている寿命に基づいて、ユーザーが手動で削除するか、ブラウザーが削除するまで、ブラウザーはこれらの Cookie ファイルを格納します。

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

認証 Cookie の有効期間を指定するには、次の手順に従います。

  • 次のパッチ スニペットを使用して、Cookie の既定の有効期間を指定し、スライド式有効期限を有効または無効にします。

    RequestResponse
    
    <?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 アプリケーションは永続的な認証 Cookie を作成します。フェデレーション認証による認証では、非永続的な Cookie のみが生成されます。

たとえば、プロバイダー上で [ユーザー名を保存] を選択せずに外部 ID プロバイダーを介してサインインした場合は、ブラウザー セッションの有効期限が切れた後にもう一度サインインする必要があります。

外部 ID プロバイダーを介してログインし、そのプロバイダー上で [ユーザー名の保存] オプションを選択してから、ブラウザー セッションの有効期限が切れると、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 Server プロバイダーに exp クレーム値を使用します。Config.Authentication.IdentityServer.Owin.Authentication.IdentityServer.config ファイルを参照してください。

RequestResponse

<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>

Do you have some feedback for us?

If you have suggestions for improving this article,