---
title: "Sitecore Identityサーバーをフェデレーションゲートウェイとして使用してください"
slug: "use-the-sitecore-identity-server-as-a-federation-gateway"
abstract: "Sitecore Identityサーバーは外部のアイデンティティプロバイダーへのゲートウェイとして機能します。"
---
# Sitecore Identityサーバーをフェデレーションゲートウェイとして使用してください

[Duende IdentityServer](https://docs.duendesoftware.com/identityserver/v6)をベースにしているため、Sitecore Identity(SI)サーバーを1つ以上の外部アイデンティティプロバイダー(またはサブプロバイダー、時に*内部プロバイダー*とも呼ばれる)へのゲートウェイとして利用できます。IdentityServer Federation Gatewayにはこの概念に関する詳細情報があります。

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

SIサーバーに含まれるAzure ADアイデンティティプロバイダーを有効にする必要があります。これを行う手順は {SI\_server\_root\_folder}\\sitecore\\Sitecore.Plugin.IdentityProvider.AzureAd\\Config\\readme.txtファイルをご覧ください。

> [!noteOpenID ConnectとAzure Active Directoryを使ってウェブアプリケーションへのアクセスを認可することで、Azure ADをSIサーバーと連携させることができます](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-openid-connect-code)

> !注もし「リクエストで指定された返信URLがアプリケーションに設定された返信URLと一致しない」というエラーを見た場合、アプリケーションマニフェストのreplyUrlsセクションでhttps://SI Server host name/signin-oidc URLを使用してください。

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

SIサーバーにサブプロバイダーを追加するには:

1.  Visual Studioで新しいプラグインを作成する:
    
    :::文字で
    
    1.  *Class Library (.NET Standard)* C#プロジェクトを作りましょう。
        
    2.  リポジトリのルートにglobal.jsonファイルを作成します:
        
        {
         "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.Abstraction*でランタイム抽象化を可能にし、プラグインの機能を構築する場合は他のプラグインへの参照も可能です。:::
        
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つ、すなわちSIサーバー(Sitecore.Owin.Authentication.IdentityServer.config設定ファイルのSitecoreIdentityServer名)のみを知り、明示的に指定しない限りサブプロバイダーについては知りません。

サブプロバイダーを指定するのは以下の状況です:

-   サブプロバイダーを SitecoreIdentityServer 自体ではなく他のサイトにマッピングしたいのです。例えば、SIサーバーは shell サイトと admin サイトにマッピングされていますが、SIサーバーで設定されたAzure ADプロバイダーは websiteにマッピングしたいです。
-   GetSignInUrlInfoPipelineパイプラインを使っていて、特定のサブプロバイダーのサインインURLを取得して、ユーザーを直接サブプロバイダーのログインページにリダイレクトしたい(SIログインページは飛ばします)。

> !注新しいログインエンドポイントをサブプロバイダーで使用するために、Sitecoreでサブプロバイダーを登録することは任意です。SIサーバーで組み込みのAzure ADサブプロバイダーを有効にし、shellサイトの$(loginPath)shell/SitecoreIdentityServer/IdS4-AzureAdloginPage属性でこのURLを指定すれば、シェルユーザーはAzure ADを使って認証し、SIサーバーのログインページをスキップできます
> 
> SIサーバーでAD Azure登録するには、AuthenticationScheme設定の値をIdS4-AzureAdとして指定します。

Sitecoreでサブプロバイダーを登録するには:

-   sitecore/federatedAuthentication/identityProvidersノードにidentityProviderノードを追加します。この構成ノードはnameパラメータの命名規則に従う必要があります。nameパラメータは次の形式でなければなりません:gateway\_identity\_provider/AuthenticationScheme、ここでgateway\_identity\_providerはSitecore直接通信するアイデンティティプロバイダー、AuthenticationSchemeはgateway\_identity\_providerで設定したサブアイデンティティプロバイダーの認証スキーム(例: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サブプロバイダーの登録例があります。

## クレーム変換の設定

各外部アイデンティティプロバイダーごとにクレーム変換を設定することができます。これらはSitecoreが既に持っているものに似ていますが、以下の理由からSIサーバー側でクレーム変換を行う必要があります。

-   SIサーバーと他のSIクライアント(Sitecore自体でないクライアント)との通信にはSitecoreインスタンスは存在しません。例えば、非SitecoreアプリケーションがSIサーバーを外部プロバイダーとして使用した場合、そのアプリケーションはSIサーバー内で正規化されていない限り正規化されたクレームを受け取りません。
-   SIサーバーは、実際にSIクライアントが *Scopes*を用いて要求したクレームのみを返します。したがって、SIクライアントは自分たちに未知のクレームを受信しません。

デフォルトでは、Sitecore Identityは以下のカスタムスコープで動作します:アイデンティティリソースとしてのsitecore.profileとAPIリソースとしてのsitecore.profile.apiです。

> !注このパイプラインでSitecoreのリクエストされたスコープを変更できます: sitecore/pipelines/owin.identityProviders/processorid=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のスコープには、以下の請求項が含まれています。

-   名称
-   メール
-   役割
-   http://www.sitecore.net/identity/claims/isAdmin
-   http://www.sitecore.net/identity/claims/originalIssuer

ユーザーに役割を与えるために:

-   特定の入ってくるクレームを適切なロールクレームにマッピングします。例えば、90e5a2e5-4e3f-4f25-8beb-1238052fda8e Azure ADグループをsitecore\\Authorの役割に変換する場合:
    
    <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>
    

> !注同じ名前のノードを複数追加しないでください。複数のノードが必要な場合は、ノード名をAzureGroupTransformation1、AzureGroupTransformation2、などと付けてください。

ユーザーを管理者にするには:

-   http://www.sitecore.net/identity/claims/isAdminを加え、値をtrueに設定します(Sitecoreの管理者ユーザーであることは特定の役割を持つことではありません)。例えば、a9bb60b6-40d2-4e2a-88b8-0e47ee2d078e Azure ADグループのすべてのユーザーを管理者ユーザー Sitecore作成する場合:
    
    <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>
    

次に、configuration:sitecore:federatedAuthentication:propertyInitializer:mapsノードのSitecoreに請求を写像します。{application\_root\_folder}\\App\_Config\\Sitecore\\Owin.Authentication.IdentityServer\\Sitecore.Owin.Authentication.IdentityServer.config fileにはその例があります:

<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/emailaddress を email請求にマッピングするためのクレーム変換を追加できます。 {SI\_server\_root\_folder}\\sitecore\\Sitecore.Plugin.IdentityProvider.AzureAd\\Config\\Sitecore.Plugin.IdentityProvider.AzureAd.xml ファイルの例を参照してください。
-   必要なクレームをSIサーバーに新たに登録し、クライアントがこのスコープを要求できるようにし、クライアントもこのスコープを要求できるようにします。

Sitecoreが外部ユーザーを表す永続ユーザーを作成する際には、いくつかの制限があります。Sitecoreはそのようなユーザーに対して以下の機能をサポートしていません。

1.  **ユーザーマネージャー**で外部ユーザーの役割を読み取り削除すること。これらのロールはSitecoreに保存されていないためです。
2.  そのため、Access Viewerを使いましょう。
3.  ユーザーパスワードの変更。対応するアイデンティティプロバイダーでパスワードを変更しなければなりません。

## Configure Azure AD

Sitecore IdentityサーバーでAzure ADを設定・使用する際には、以下のことを覚えておく必要があります:

-   ウェブのアプリケーション登録の「**認証**」タブの詳細設定で**IDトークンの**チェックボックスを確認してください。
-   アプリケーションマニフェストで groupMembershipClaims 設定の値を SecurityGroupに設定します。
-   replyUrls設定はレガシー版のアプリケーション登録のみです。代わりにreplyUrlsWithTypeを使いましょう。