Sitecore 認証動作の変更について
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Sitecore Identity (SI) は、Sitecore 9.0 で導入されたフェデレーション認証機能を使用します。これらの機能は、OWIN 認証ミドルウェア上に構築されています。ただし、Sitecore 9.0 では、OWIN 認証統合とフェデレーション認証の両方が既定で無効になっています。
Sitecore 9.1 以降では、Sitecore Identity は既定で有効になっています。OWIN 認証とフェデレーション認証も SI で必要とされるため、有効になっています。
このトピックでは、Sitecore 認証動作の変更について説明し、次の方法の概要を説明します。
認証範囲の設定
既定では、Sitecore は、shell
や admin
などの 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
ファイルは次を含んでいます。
<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
ページからリダイレクトされないようにするには、次の手順に従います。
-
shell
ログイン ページにパッチを適用して、/sitecore/login
に戻すか、追加の URL パラメーター (?fbc=1
) で/sitecore/login
を要求します。 -
または、
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>
ユーザー サインアウトを実装する
フェデレーション認証は Sitecore 9.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 つの正しい組み合わせを見つけることで、パスワードを見つけようとする試みです。
ユーザー アカウントのロックアウトを設定するには、次の手順に従います。
-
Sitecore:IdentityServer:SitecoreMembershipOptions:MaxInvalidPasswordAttempts
およびSitecore:IdentityServer:SitecoreMembershipOptions:PasswordAttemptWindow
設定で、MaxInvalidPasswordAttempts
およびPasswordAttemptWindow
を設定します。 -
または、Sitecore インスタンスの
Web.config
ファイルでMaxInvalidPasswordAttempts
とPasswordAttemptWindow
を指定します。これは、Sitecore Identity Server が無効になっている場合、またはidentityServer.xml
のパスワード ポリシー パラメーターが指定されていない場合にのみ機能します。
SI サーバーのルート https://{si_server}/
および組織外の https://{si_server}/account/login
URL へのアクセスを制限する必要があります。
認証 Cookie の有効期間の指定
以下の 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
ファイルを参照してください。
<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>