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クライアントサイト(例えばshellやadmin)のみの認証を担当するように設定しています。つまり、SIサーバーを通じてshell認証をした場合、websiteはそのユーザーを受け入れず、ウェブサイト上で匿名になります。また、GetSignInUrlInfoPipelineパイプラインを使ってウェブサイト上でサインインリンクを生成する場合、SIサーバーでのサインインリンクが予期せずそこに表示されることはありません。

認証範囲を設定するには:

  • sitecore/federatedAuthentication/identityProvidersPerSites/ノードの下のmapEntryノードで、許可したいサイトとアイデンティティプロバイダーの組み合わせを指定します。

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

  • すべてのサイト
  • ウェブデータベースを持つサイト
  • コアデータベースと未指定データベースを持つサイト
  • エクストラネットドメインを持つサイト
  • 管理サイト

!注これらのあらかじめ定義されたmapEntryノードは動的に作成されており、自分のmapEntryのmapEntry/sitesセクションで特別な表現を使うことができます。詳細はConfig.Authentication.Owin.Authentication.configファイルをご覧ください。

デフォルトでは、SIサーバープロバイダーは コアおよび未指定のデータベースノードがあるサイト mapEntry に配置されます。

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

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

Sitecoreにアクセスするには/sitecoreまたは /sitecore/adminURLを使用し、ログアウト ボタンでサインアウトや他のユーザーへの変更を行うことをお勧めします。

Sitecore Federated Authenticationは、Sitecoreユーザーを外部のアイデンティティプロバイダーのログインページに直接リダイレクトできる新しいログインページエンドポイントを提供しており(Sitecoreにログインページを表示することなく)、ユーザーが対応するボタンをクリックするまで待つことができます。

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

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

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

  • {identity_provider} はユーザーをリダイレクトしたいログインページのアイデンティティプロバイダーの名前です。

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

    !注inner_identity_providerアイデンティティ提供者はacr_value = idp

    _identity_providerとしてidentity_providerアイデンティティプロバイダーに送信されます。したがって、identity_providerアイデンティティプロバイダーはacr_valueをサポートしなければなりません。

SIサーバープロバイダーはSitecoreでSitecoreIdentityServer名を設定し、Sitecore.Owin.Authentication.IdentityServer.configファイルには以下の内容が含まれます:

   

!注クロスオリジンの問題を防ぐために、サイトの属性値loginPage相対的なURLが含まれていることを確認してください。

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

/sitecore/loginページを戻す

Sitecore 9.0では、以前設定した外部アイデンティティプロバイダーのログインボタンを復活させることができます。

Sitecore.Owin.Authentication.IdentityServer.config設定ファイルは、shellやadminサイトのloginPage属性をSitecoreが扱う新しい特殊エンドポイントにパッチを当てます。

SIが有効で /sitecore/loginページにアクセスしようとすると、shellサイトに指定されたログインページにリダイレクトされます。ただし、同じページでなければ。

!注この挙動はInterceptLegacyShellLoginPageプロセッサが原因です。

SIサーバーにアクセスできず、初期メタデータを取得できない場合Sitecoreユーザーは /sitecore/login?fbc=1ページにたどり着きます。

!注IdentityProviderIsInaccessibleプロセッサとその構成を確認してください。

もし外部のアイデンティティプロバイダーを連邦認証でサインインshell設定している場合でも、SIサーバーのログインページには追加のログインボタンが表示されないため、/sitecore/loginページを使う必要があります。

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

Sitecoreがユーザーをsitecore/loginページからリダイレクトしないように:

  1. shellログインページを元のURLパラメータ(?fbc=1)でリクエスト/sitecore/loginを/sitecore/loginに戻すか、
  2. あるいは、InterceptLegacyShellLoginPageプロセッサのlegacyShellLoginPage特性をランダムな値にパッチする方法もあります。

これらの操作のいずれかが、Sitecoreがユーザーを /sitecore/loginページからリダイレクトするのを防ぎます。SIサーバーはSitecore通常の外部アイデンティティプロバイダーとして設定されており、/sitecore/loginページでサインインボタンが表示されます。キャプションは「 *ログインへ」*です。

Sitecore Identityを無効にする

SitecoreインスタンスはSIクライアントですが、SIを無効にすればSIサーバーなしでも動作します。これは9.1以前のバージョンでSitecoreされています。

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

!注認証フォールバックが起きても、Owin.Authentication.Enabled設定で有効化されているため、OWIN認証ミドルウェアは引き続き使用されます。

SIサーバーを一切使わない方法:

  • この設定ファイルを有効化してください:\App_Config\Include\Examples\Sitecore.Owin.Authentication.IdentityServer.Disabler.config.example。このファイルは以下の通りです:
    • SitecoreIdentityServerプロバイダーのEnabledプロパティをfalseに設定します。

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

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

OWINおよびフェデレーテッド認証を無効にするには:

  • この設定ファイルを有効化してください:\App_Config\Include\Examples\Sitecore.Owin.Authentication.Disabler.config.example。このファイルは以下の通りです:

    • Owin.Authentication.EnabledとFederatedAuthentication.Enabledをfalseに設定します。
    • shellサイトのloginPage属性を初期値(/sitecore/loginと/sitecore/admin/login.aspx)にパッチadminします。
  • この設定をweb.configファイルに追加してください:

  • web.configファイルの元の認証ノードを復元します:

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

フェデレーテッド認証はSitecore 9.1で拡張されました。ユーザーがSitecoreからサインアウトすると、外部のアイデンティティプロバイダーからのサインアウトを実装しやすくなります。

ユーザーが外部のアイデンティティプロバイダーからサインアウトすると、Sitecore Identityはそのアイデンティティプロバイダーのログアウトページにリダイレクトし、その後Sitecoreに戻します。Sitecoreと基盤となるアイデンティティプロバイダーの両方からの完全なサインアウトは通常、単一のリクエストで実現できません。しかし、Sitecore IdentityはAuthenticationManager.Logout() メソッドを使うと自動的にすべてを処理します。

この機能はデフォルトでSIサーバープロバイダー(構成SitecoreIdentityServer)でのみ有効にされており、sitecore/federatedAuthentication/identityProviders/identityProviderid=SitecoreIdentityServer/triggerExternalSignOutはデフォルトで真です。

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

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

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

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

  1. MaxInvalidPasswordAttemptsとPasswordAttemptWindowをSitecore:IdentityServer:SitecoreMembershipOptions:MaxInvalidPasswordAttemptsとSitecore:IdentityServer:SitecoreMembershipOptions
  2. あるいは、SitecoreインスタンスのWeb.configファイルでMaxInvalidPasswordAttemptsとPasswordAttemptWindowを指定する方法もあります。これはSitecore Identityサーバーが無効化されているか、identityServer.xmlのパスワードポリシーパラメータが指定されていない場合にのみ機能します。

!重要SIサーバーのルートhttps://{si_server}/ および組織外のURLへのアクセスhttps://{si_server}/account/login制限してください。

認証クッキーの寿命を指定します

クッキーには2種類あります:

  • セッションクッキー(非永続的)- これは一時的なクッキーファイルです。ブラウザを閉じると消去されます。
  • 永続クッキー - ブラウザはこれらのクッキーファイルを保存し、あなたが手動で削除するか、永続クッキーファイル自体に指定された保存期間に基づいて保存します。

現代のブラウザは、適切なブラウザオプションがオンになった場合、セッション間でセッションクッキーを保持する傾向があります。これにより、セッションクッキーが永続的なクッキーのように振る舞うことがよくあります。OWIN認証では、クッキーの寿命値をクッキーの値自体に保存できます。つまり、クッキーが期限切れであればウェブアプリケーションはクッキーを有効期限として扱いますが、ブラウザはクッキーをサーバーに送信します。

認証クッキーの寿命を指定するには:

  • 以下のパッチスニペットを使って、デフォルトのクッキー有効期限を指定し、スライディング期限を有効または無効にしてください。

    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

    . --> `00
    `
    true
    ...

ウェブアプリケーションは、ユーザーがRemember meオプションを選択すると永続認証クッキーを作成します。Federated Authenticationによる認証は非永続的クッキーのみを生成します。

例えば、外部のアイデンティティプロバイダーでRemember meオプションを選択していない場合、ブラウザセッション終了後に再度サインインしなければなりません。

外部のアイデンティティプロバイダーを通じてサインインし、そのプロバイダーのRemember meオプションを選択すると、ブラウザセッションが終了するとSitecore認証クッキーが失われます。しかし、アイデンティティプロバイダーへの簡単な自動リダイレクトを経て戻ると、自動的に再びSitecoreにサインインされます。

特定のアイデンティティプロバイダーのクッキー ExpireTimeSpan設定を上書きするには:

この値は、認証クッキーがブラウザで処理されないようにする時間帯を示します。

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

true
この記事を改善するための提案がある場合は、 お知らせください!