フェデレーション ゲートウェイとしての Sitecore Identity Server の使用

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

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

Sitecore Identity (SI) サーバーは IdentityServer4 に基づいているため、Sitecore Identity (SI) サーバーを 1 つ以上の外部 ID プロバイダー (またはサブプロバイダー、時には内部プロバイダーとも呼ばれる) へのゲートウェイとして使用できます。この概念については、「IdentityServer4 フェデレーション ゲートウェイ」で説明しています。

サブプロバイダーを設定すると、このプロバイダーのログイン ボタンが SI サーバーのログイン画面に表示されます。

SI サーバーに含まれている Azure AD ID プロバイダーを有効にする必要があります。この方法については、{SI_server_root_folder}\sitecore\Sitecore.Plugin.IdentityProvider.AzureAd\Config\readme.txt ファイルを参照してください。

注記

OpenID Connect と Azure Active Directory を使用して Web アプリケーションへのアクセスを承認することで、Azure AD が SI サーバーと連携するように設定することができます。 

注記

「要求で指定された返信 URL がアプリケーション用に設定された返信 URL と一致しません:」というエラーが表示された場合は、アプリケーション マニフェストの replyUrls セクションで https://[SI Server host name]/signin-oidc URL を使用します。

Sitecore Identity Server でのサブプロバイダーの設定

SI サーバーにサブプロバイダーを追加するには、次の手順に従います。

  1. Visual Studio で次のように新しいプラグインを作成します。

    1. クラス ライブラリ (.NET 標準) C# プロジェクトを作成します。

    2. リポジトリのルートに global.json ファイルを次のように作成します。

      RequestResponse
      {
          "msbuild-sdks": {
              "Sitecore.Framework.Runtime.Build": "1.1.0"
          }
      }

      バージョンを適切に指定します。

    3. csproj ファイルを次のように編集します。Project ノードの後に、<Sdk Name="Sitecore.Framework.Runtime.Build" /> を追加します。

    4. 必要な他の参照を追加します。コマンドを有効にするための Sitecore.Framework.Runtime.Commands、ランタイム抽象化の使用を有効にするための Sitecore.Framework.Runtime.Abstractions、プラグインにすでにある機能の上にビルドする場合の他のプラグインへの参照などを追加します。

  2. このプロバイダーの指示に従って、優先サブプロバイダーのサービスを設定し、SignInScheme 設定に idsrv.external を指定します。

    注記

    AddOpenIdConnect などの認証ミドルウェアを使用するには、Microsoft.AspNetCore.Authentication.AuthenticationBuilder 型のオブジェクトがある必要があります。プラグインで、services.AddAuthentication() の代わりに new Microsoft.AspNetCore.Authentication.AuthenticationBuilder(services) を使用してください。

  3. 設定にサブプロバイダーを登録します。{SI_server_root_folder}\sitecore\Sitecore.Plugin.IdentityProvider.AzureAd\Config\Sitecore.Plugin.IdentityProvider.AzureAd.xml ファイルにこの例があります。

  4. 必要に応じて、Sitecore インスタンスにサブプロバイダーを登録します。

Sitecore インスタンスにサブプロバイダーを登録する

既定では、Sitecore インスタンスは 1 つの外部 ID プロバイダー (SI サーバー (Sitecore.Owin.Authentication.IdentityServer.config 設定ファイルの SitecoreIdentityServer 名) のみを認識し、明示的に指定しない限り、サブプロバイダーについて認識しません。

次の状況でサブプロバイダーを指定します。

  • サブプロバイダーを、SitecoreIdentityServer 自体ではなく他のサイトにマップする場合があります。たとえば、SI サーバーを shell および admin サイトにマップするが、SI サーバーで設定されている Azure AD プロバイダーを website にマップする場合があります。

  • GetSignInUrlInfoPipeline パイプラインを使用し、特定のサブプロバイダーのサインイン URL を取得して、(SI ログインページをスキップし、) ユーザーをサブプロバイダーのログイン ページに直接リダイレクトしたい場合があります。

注記

サブプロバイダーで新しいログイン エンドポイントを使用するために、サブプロバイダーを Sitecore に登録することはオプションです。SI サーバーで組み込みの Azure AD サブプロバイダーを有効にしてから、この URL $(loginPath)shell/SitecoreIdentityServer/IdS4-AzureAdshell サイトの loginPage 属性で指定した場合、シェル ユーザーは Azure AD を使用して認証し、SI サーバーのログイン ページをスキップできます。

Azure AD を SI サーバーに登録するには、AuthenticationScheme 設定の値に IdS4-AzureAd を指定します。

Sitecore にサブプロバイダーを登録するには、次の手順に従います。 

  • identityProvider ノードを sitecore/federatedAuthentication/identityProviders ノードに追加します。この設定ノードは、name パラメーターの命名規則に従う必要があります。name パラメーターは次の形式である必要があります。[gateway_identity_provider]/[AuthenticationScheme]、ここで gateway_identity_provider は Sitecore が直接通信する ID プロバイダーであり、AuthenticationSchemegateway_identity_provider で設定したサブ ID プロバイダーの認証スキーム (IdS4-AzureAd など) です。

    次のように、考慮すべきいくつかの制限があります。

    • TriggerExternalSignOut および Transformations プロパティは gateway_identity_provider ノードから継承され、これらをオーバーライドすることはできません。

    • このサブプロバイダーを有効にするには、gateway_identity_provider プロバイダーの Enabled プロパティを Enabled に設定する必要があります。

App_Config\Sitecore\Owin.Authentication.IdentityServer\Sitecore.Owin.Authentication.IdentityServer.config 設定ファイルに、Azure AD サブプロバイダーを登録する例があります。

クレーム変換の設定

外部 ID プロバイダーごとにクレーム変換を設定できます。これらは Sitecore にすでにあるものと似ていますが、次の理由により、SI サーバー側でクレーム変換を行う必要があります。

  • SI サーバーと他の SI クライアント (Sitecore 自体ではないもの) 間の通信には Sitecore インスタンスはありません。たとえば、Sitecore 以外のアプリケーションが SI サーバーを外部プロバイダーとして使用している場合、そのアプリケーションは、SI サーバーで正規化されていない限り、正規化されたクレームを受け取りません。

  • SI サーバーは、SI クライアントが Scopes を使用して実際に要求したクレームのみを返します。したがって、SI クライアントは自身が認識できないクレームを受け取りません。

既定では、Sitecore Identity は、カスタム スコープ (ID リソースとして sitecore.profile、API リソースとして sitecore.profile.api) で動作します。

注記

次に示すパイプラインで Sitecore に要求されたスコープを変更できます。sitecore/pipelines/owin.identityProviders/processor[id=SitecoreIdentityServer]/scopes)

 Sitecore.Plugin.Authentication.OpenIdConnect パッケージを使用するアプリケーションの場合は、{application_root_folder}\sitecore\Sitecore.Plugin.Authentication.OpenIdConnect\Config\openIdConnect.xmlファイルを確認してください。設定パスは Sitecore:Authentication:OpenIdConnectOptions:Scope:... です。

注記

既定のスコープ定義は、{SI_server_root_folder}\sitecore\Sitecore.Plugin.IdentityServer\Config\identityserver.xml ファイルで確認できます。

sitecore.profile および sitecore.profile.api スコープは両方とも次のクレームを含んでいます。

  • name

  • email

  • role

  • http://www.sitecore.net/identity/claims/isAdmin

  • http://www.sitecore.net/identity/claims/originalIssuer

ユーザーにロールを付与するには、次の手順に従います。

  • 特定の受信クレームを適切なロール クレームにマップします。たとえば、90e5a2e5-4e3f-4f25-8beb-1238052fda8e Azure AD グループを sitecore\Author ロールに変換するには、次のようにします。

    RequestResponse
    <AzureGroupTransformation type="Sitecore.Plugin.IdentityProviders.DefaultClaimsTransformation, Sitecore.Plugin.IdentityProviders">
                    <SourceClaims>
                                    <Claim1 type="groups" value="90e5a2e5-4e3f-4f25-8beb-1238052fda8e" />
                    </SourceClaims>
                    <NewClaims>
                                    <Claim1 type="role" value="sitecore\Author" />
                    </NewClaims>
    </AzureGroupTransformation>
    
注記

同じ名前の複数のノードを追加しないでください。複数のノードが必要な場合は、ノード AzureGroupTransformation1AzureGroupTransformation2 などの名前を付けます。

ユーザーを管理者にするには、次の手順に従います。

  • http://www.sitecore.net/identity/claims/isAdmin を追加して、値を true に設定します (Sitecore の管理者ユーザーであるということは、特定のロールを持っているわけではありません) 。たとえば、a9bb60b6-40d2-4e2a-88b8-0e47ee2d078e Azure AD グループの Sitecore 管理者ユーザーにするには、次のようにします。

    RequestResponse
    <AzureADUserToAdminUser type="Sitecore.Plugin.IdentityProviders.DefaultClaimsTransformation, Sitecore.Plugin.IdentityProviders">
                    <SourceClaims>
                                    <Claim1 type="groups" value="a9bb60b6-40d2-4e2a-88b8-0e47ee2d078e" />
                    </SourceClaims>
                    <NewClaims>
                                    <Claim1 type="http://www.sitecore.net/identity/claims/isAdmin" value="true"/>
                    </NewClaims>
    </AzureADUserToAdminUser>

次に、Sitecore のクレームを configuration:sitecore:federatedAuthentication:propertyInitializer:maps ノードにマップします。「{application_root_folder}\App_Config\Sitecore\Owin.Authentication.IdentityServer\Sitecore.Owin.Authentication.IdentityServer.config file」にこの例があります。

RequestResponse
<propertyInitializer>
    <maps>
        <map name="set IsAdministrator" type="Sitecore.Owin.Authentication.Services.DefaultClaimToPropertyMapper, Sitecore.Owin.Authentication">
            <data hint="raw:AddData">
                <source name="http://www.sitecore.net/identity/claims/isAdmin" value="true" />
                <target name="IsAdministrator" value="true" />
            </data>
        </map>
    </maps>
</propertyInitializer>

変換された名前とメール クレームに対して同様の手順を使用して、これらを Sitecore のユーザー プロパティにマップします。

次の例は、必須のクレーム変換の必要性を示しています。

サブプロバイダーが http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress クレームで ID を返す場合、ユーザーはどの SI クライアントでもそれを取得することはできません。次の 2 つのオプションがあります。

  • SI サーバーでは、クレーム変換を追加して http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressemail クレームに追加することができます。例については、{SI_server_root_folder}\sitecore\Sitecore.Plugin.IdentityProvider.AzureAd\Config\Sitecore.Plugin.IdentityProvider.AzureAd.xml ファイルを参照してください。

  • SI サーバーに必要なクレームを含む新しいスコープを登録して、クライアントがこのスコープを要求できるようにします。

Sitecore で外部ユーザーを表す永続的なユーザーを作成する場合は、いくつかの制限があります。Sitecore は、このようなユーザー向けの次の機能をサポートしていません。

  1. ユーザー マネージャーでの外部ユーザーのロールの読み取りと削除。これらのロールは Sitecore に格納されていないためです。

  2. このため、アクセス ビューアーを使用します。

  3. ユーザー パスワードの変更。対応する ID プロバイダーでパスワードを変更する必要があります。

Azure AD の設定

Sitecore Identity Server で Azure AD を設定して使用する場合は、次の点に注意する必要があります。

  • アプリケーション登録の [Web - 認証] タブの [詳細設定] で、[ID トークン] チェックボックスをオンにします。

  • アプリケーション マニフェストの groupMembershipClaims 設定の値を SecurityGroup に設定します。

  • アプリケーション登録のレガシー バージョンでは、replyUrls のみを設定できます。代わりに、replyUrlsWithType を使用してください。

何かフィードバックはありますか?

この記事を改善するための提案がある場合は、