Sitecore の Active Directory モジュールの設定を編集して実際に Sitecore 上で使用てみます。サイトコア Active Directory のインストールに関しては[Sitecore Active Directory] Active Directory モジュールを使用してみる セットアップ編を参照してください。今回は MembershipProvider, RoleProvider を設定してサイトコアユーザーインタフェースのユーザーマネージャーや ロールマネージャーでADのユーザーやグループを使用できるようにします。

検証環境は次のとおりです。

  • Sitecore の動作するサーバーは ADのメンバサーバー, Windows Server 2008 R2, IIS7.5
  • Sitecoreのバージョン Sitecore CMS 6.6 SP1
  • ADモジュールのバージョン Sitecore Active Directory 1.1 rev.130705
  • test.local の SCUsers という 組織ユニット 配下のユーザーやグループを連携ユーザー、グループとして使用

サイトコアアプリケーションのアプリケーションプールの実行ユーザーは TEST\IisScSvc というドメインのユーザーです。このユーザーは Domain Users グループの所属しています。また、Sitecoreが動作する サーバー上の Performance Monitor Usersグループに所属しています。その他ファイルやフォルダ、レジストリなどのアクセス権限の設定に関しては[Sitecore Active Directory] Active Directory モジュールを使用してみる セットアップ編を参照してください。 

Active Direcrory モジュールの構成方法の詳細に関しては、 SDN のドキュメント を使用してください。Active Directory モジュール1.1のドキュメントのURLを参考までに掲載しておきます。

Active Directory Module Administrator's Guide

1. 接続文字列の編集

接続文字列を追加 ConnectionStrings.config に追加します。今回は test.local というドメインに接続します。連携するユーザーとグループは SCUsers という組織ユニットに格納されています。そのため、次のような接続文字列を設定しました。 

  <add name="ManagersConnString" connectionString="LDAP://test.local/OU=SCUsers,DC=test,DC=local" />

name には 各Providerで使用する 接続文字列を表す一意の名前を設定します。今回の例では ManagersConnString という名前にしています。

2. Provider の編集

MembershipProvider と RoleProvider の設定を行います。

2.1 MembershipProvider の設定

Web.config の system.web/membership にadという名前で MembershipProvider を定義する 次の要素を追加 します。adというのはメンバシッププロバイダを表す名前です。

<add name="ad"	
	 type="LightLDAP.SitecoreADMembershipProvider"
	 connectionStringName="ManagersConnString"
	 applicationName="sitecore"
	 minRequiredPasswordLength="1"
	 minRequiredNonalphanumericCharacters="0"
	 requiresQuestionAndAnswer="false"
	 requiresUniqueEmail="false"
	 attributeMapUsername="sAMAccountName"
	 enableSearchMethods="true" />

attributeMapUsernameはログインに使用するADの属性名 sAMAccountName以外に userPrincipalName も使用できます。 connectionStringNameは 接続文字列の名前を指定します。今回は ManagersConnString を使用します。  

その他指定できるパラメーターとして、 connectionUsername, connectionPasswordがあります。ApplicationPoolの実行ユーザーでADにアクセスさせたくない場合に指定します。SitecoreのWebサーバーがADのメンバサーバーでないためアプリケーションプールのユーザーがADに接続できない場合や、AD連携の機能を使用するためにより強い権限が必要なため特別なユーザーでADに接続したい場合に使用します。

参考までに 編集したWeb.config のスナップショットも下記に貼り付けておきます。

2.2 RoleProvider の設定

system.web/roleManager  にad という名前でRoleProviderを定義する次の要素を追加します。adという名前はロールプロバイダを表す名前です。

<add name="ad" type="LightLDAP.SitecoreADRoleProvider" 	
     connectionStringName="ManagersConnString"	
     applicationName="sitecore" 	
     attributeMapUsername="sAMAccountName" 	
     cacheSize="2MB" />	

connectionStringNameは接続文字列の名前を指定します。今回は ManagersConnString を設定しています。ADとの接続ユーザーにアプリケーションプールのユーザーを使用しない場合 username,password を属性に追加して適切な資格情報を設定します。username,password はアプリケーションプールのユーザーがADに接続できない場合や十分なADを操作する必要な権限を持っていない場合に使用します。attributeMapUsernameはMembershipProviderと同じものを指定します。 

参考までに 編集したWeb.config のスナップショットも下記に貼り付けておきます。

ADのユーザーの電話番号などのプロファイル情報を連携したい場合はプロファイルプロバイダの設定が必要になります。

SDN の Active Directory モジュールのドキュメントActive Directory Module Administrator's Guide のConfiguring the Profile Provider を参照してください。プロファイルを連携する場合は、プロバイダの設定に加えて連携するADの属性情報をWeb.configで指定し、Sitecreのユーザーテンプレートの拡張を行います。

Membership, Role プロバイダーの定義を行いましたので、 サイトコア上で定義したプロバイダを使用できるようにします。

2.3 Switching Provider の編集

Web.config の system.web/membership に定義された sitecore という名前の MembershipProvider の realProviderName を switcher に変更します。

<add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="switcher" providerWildcard="%" raiseEvents="true"/>

同じように system.web/roleManager に定義されたsitecoreという名前のRoleProvider の realProviderName を switcher に変更します。

<add name="sitecore" raiseevents="true" realprovidername="switcher" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel"></add>

App_Config/Security/Domains.config.xml ファイルに今回設定している AD連携モジュールで使用するサイトコアのセキュリティドメインの定義を追加します。

<domain name="ad" ensureAnonymousUser="false"/>

最後に、 Web.config の switchingProvider の設定で上記で作成した ad というセキュリティドメインで使用するプロバイダにActive Directory 連携用のプロバイダを使用する定義を追加します。

Web.configの sitecore/switchingProviders/membership に 以下の要素を追加します。providerNameで指定する文字列はMembershipプロバイダで定義したプロバイダの名前です。domainsには先ほど追加したセキュリティドメインの名前を指定します。

<provider providerName="ad" storeFullNames="false" wildcard="*" domains="ad" />

Web.configの sitecore/switchingProviders/roleManager に以下の要素を追加します。providerNameで指定する文字列はRoleプロバイダで定義したプロバイダの名前です。domainsには先ほど追加したセキュリティドメインの名前を指定します。

<provider providerName="ad" storeFullNames="false" wildcard="*" domains="ad" />

AD連携モジュールでプロファイルプロバイダも使用する場合はsitecore/switchingProviders/profile に次の要素を追加します。
<provider providerName="ad" storeFullNames="false" wildcard="*" domains="ad" />

以上でコンフィグレーションの完了です。

3.動作確認

sitecore/admin などでサイトコアデスクトップにログインし、ユーザーマネージャーを起動します。そうすると、下図の赤枠で囲んだように OU=SCUsers,DC=test,DC=local の任意の階層配下のユーザーが一覧に表示されるようになります。ADのユーザーはad というセキュリティードメインに連携されるようにセットアップしたので、 ADのユーザーのサイトコア上のセキュリティドメインは ad となります。この段階では表示されているだけで、サイトコアのメンバシップデータベース上にはまだユーザーのレコードは作成されていません。

同じように ロールマネージャーを起動すると 、OU=SCUsers,DC=test,DC=local の任意の階層配下のセキュリティおよび配布グループが一覧に表示されるようになります。サイトコアのadというセキュリティドメインに連携されるように設定したので、 セキュリティグループ は ad というセキュリティグループに所属しています。

ここではADのドメインではなく、App_Config/Security/Domains.config.xml で指定した ad というサイトコアのドメインのユーザー、ロールとしてADのユーザーおよびグループが表示されていることに注意してください。

そのため、ADのユーザーが サイトコアクライアントにログインする場合は、本例では ad\testuser01 というアカウントでログインを行います。ユーザーマネージャーやロールマネージャーで一覧表示した段階では、 Core データベースにユーザーやロール情報の一覧は登録されません。たとえば Core データベースの [dbo].[aspnet_Users] テーブルにSELECTを行ってもADのユーザー一覧は登録されていません。

連携できていることを確認したら ログインしてみます。下図のようにサイトコアクライアントのログイン画面を表示し、ユーザー名とパスワードを入力して ログオン ボタンをクリックしてみます。

 

そうすると 下図のようにシステムへのアクセス権限がありませんと表示されます。これは、ADのユーザーがまだサイトコアクライアントにログインできるように設定がされていないためです。

sitecore\Author ロールに ad\testuser01 を所属させてみます。下図のように ロールマネージャー上で testuser01 を sitecore\Author ロールに所属させました。下記の手順を行うと、 Core データベースの testuser01 の情報が登録されます。Sitecoreクライアントに 設定後ログインできるようになります。

他の例として、 ADのグループ(本例では TestGroup)を sitecore\Developerロール等に所属させ、testuser01 は TestGroup のメンバーにすることでログインできるようにできます。サイトコアのユーザー管理という観点では こちらのほうが効率的な管理方法になります。ADのセキュリティグループに変更する権限がないため、ロールマネージャーでユーザーをロールに所属できない場合は ドメインコントローラーにログインして Active Directory ユーザーとコンピュータスナップインから実施してください。

サイトコアクライアントのログオン画面jを表示して ADのユーザーの名前(セキュリティドメインは ad であることに注意) とパスワードを入力してログオンボタンをクリックするとログオンできます。ユーザーがログインしたときに、Coreデータベースにユーザー情報が登録されていない場合は、ログインしたタイミングでレコードが作成されます。

ロールマネージャーのUIを使用して 本例の ad\TestGroup にADのメンバーを追加しようとすると、次のダイアログが表示されます。これは ADに接続するユーザー(本例は アプリケーションプールのユーザー TEST\IisScSvc )の権限が不足しているためです。

ロールマネージャーなどから ADのユーザーを ADのセキュリティグループに含めることができるようにするにはADに接続するユーザー(本例では アプリケーションプールのユーザー)が必要な権限を持っている必要があります。

例えば、 ADの Account Operator グループのメンバーにすると ロールマネージャー上でADのユーザーをADのグループのメンバーに設定することができるようになります(下図参照)。

権限周りのエラーが発生する場合はADに接続するユーザーが十分な権限を持っている必要があります。逆に Account Operator に所属させた後は サイトコアユーザーインタフェースの ロールマネージャーやユーザーマネージャー上でユーザーやセキュリティーグループの作成ができるようになります。

ユーザーマネージャーやロールマネージャーで行いたい操作に対して ADに接続するユーザーに必要な権限についてはSDNのActive DIrectoryモジュールのドキュメント Active Directory Module Administrator's Guideの User Permissionsを参照してください。

アプリケーションプールのユーザーが Network Service の場合は コンピューターアカウントに対して権限を付与すれば、サイトコアUI上からAD上にセキュリティグループの作成やユーザーの作成ができるようになります。コンピュータアカウントにするとNetwork Service サービスアカウントで動作しているすべてのアプリケーションに影響が発生するのであまりお勧めできないかもしれません。

ADの機能を安全に活用するには アプリケーションプールのユーザーを 必要な権限のみを持つユーザーで動作させたり、メンバシップ、ロールプロバイダの設定箇所でADに接続する十分な権限を持ったユーザーを設定するようにします。

その他、 siteocre ドメインのユーザーを直接 ADのロールに所属させることはできなません。ロールにロールを所属できる機能を利用して、 sitecoreのグループをADのグループのメンバーにするようにします。

ドメインのメンバでないサーバーにSitecoreをインストールした場合やアプリケーションプールのユーザーがNetwork Serviceのようなドメインのメンバーではないユーザーの場合も、Providerの設定で connetionUsername, conectionPassword, userName, userpassword を設定することでADモジュールを動作させることができます。
 
うまくADに接続できない場合は次のことを試してみてください。
  • ネットワークアダプタで使用するDNSサーバーにADに統合されたDNSを使用するように構成する
  • 接続文字列でドメイン名(例:test.local)ではなく、実際のドメインサーバーの名前(例:domain1.test.local)を指定する

4.まとめ

説明は以上です。今回は Membership, Role プロバイダを設定して ADのユーザーとセキュリティグループ(配布グループ)を連携する方法をご紹介しました。

間違い、指摘点等ございましたらご連絡ください。