24
.NETからActive Directoryにアクセス ドメイン・サイト関連の情報を見てみる 小山 三智男 mitchin

NETからActive Directoryにアクセス

Embed Size (px)

Citation preview

.NETからActive Directoryにアクセス

ドメイン・サイト関連の情報を見てみる

小山 三智男

mitchin

2

Active Directory ドメイン構造

フォレスト

ドメインツリー

ドメイン

test.local

ドメイン

west.test.local

ドメイン

east.test.local

ドメインツリー

ドメイン

test2.local

ドメイン

sub.test2.local

3

Active Directory サイト構造

サイト

DC1

TokyoSite

DC2

DC3

サイト内複製

サイト

DC5

OsakaSite

DC4

サイト内複製サイト間複製

サイトリンクサブネット192.168.0.0/24192.168.1.0/24192.168.2.0/24

サブネット172.16.0.0/24172.16.1.0/24

Tokyo-OsakaLink

サンプルアプリケーション

4

開発環境

• OS:Windows7(x64)

• IDE:Visual Studio 2010 SP1

• アプリ:Windows フォーム(.NET 4 Client Profile)

Web フォーム(.NET 4)

クラスライブラリ(.NET 4 Client Profile)

実行環境

• 単一ドメイン、単一サイト、単一サブネット

• サーバ:Windows Server 2008 Standard SP1 (.NET 4)

• クライアント:Windows XP SP3 (.NET 4 Client Profile)

• IIS:Windows 認証

5

System.DirectoryServicesアセンブリ

• .NETからActive Directoryの色々な情報にアクセスするために参照する必要があります。

• ドメインやサイト関連はSystem.DirectoryServices. ActiveDirectory名前空間にそれらを表すクラスがあり、Active Directoryの管理タスクを自動化するために使用されます。

• Active Directory内のデータにアクセスするために使用されるのは System.DirectoryServices名前空間で、オブジェクトをカプセル化する DirectoryEntryクラスや クエリを実行するDirectorySearcherクラスなどがあります。

Webアプリは実行環境の準備が必要です

6

当たり前ですが最低でも Web サーバとしての設定が必要です。

IISの設定

アプリケーション プールの追加

Web サイトとアプリケーションの追加と認証の設定

フォルダの設定

物理パスとなるフォルダの作成とアクセス権の設定

今回の実行環境では次の設定もしました。

DNSの設定

エイリアスの追加

※IISで Default Web Site とポートが同じため

IISの設定:アプリケーション プールの追加

7

.Net Framework バージョンは 4 を

選択します。

IISの設定:Webサイトの追加

8

先程追加したアプリケーション

プールを選択します。

コンテンツ ディレクトリの物理

パスを選択または入力します。

バインドのホスト名を入力しま

す。

IISの設定:アプリケーションの追加

9

先程追加したWebサイトを

右クリックして「アプリケー

ションの追加」を選択します。

エイリアスを入力します。

物理パスを選択または入力し

ます。

IISの設定:認証の設定

10

先程追加したWebサイトとアプリケーション両方に対して認証を設定します。(どちらも認証のアイコンをダブルクリック)

統合認証する場合は、Windows 認証を有効にして匿名認証を無効にします。

フォルダの設定

11

Webサイトで指定した物理パスのフォルダ(WebApp)に対して

アクセス権を設定します。

今回は Windows 認証なので、Users グループに読み取りと実行

のアクセス権があれば特に設定する必要はないです。

Windows 認証ではない場合、通常はアプリケーション プールで

指定したアカウント(通常は NetworkService グループ)に適切

なアクセス権を設定します。

DNSの設定

12

今回は作成した Webサイトで バインドのホスト名を指定したの

で、http://testweb/directory/main.aspx のようにホスト名で

アクセスできるよう DNSを

設定します。

ホスト名は「testweb」なので

サーバのエイリアスとして

「testweb」をゾーンに追加

します。

13

クライアントも条件付きで設定が・・・

といってもクライアントPCのネットワーク(TCP/IP)の設定で、

DNSサーバのアドレスをドメインコントローラのIPアドレスに

するだけです。

クライアントPCがドメインの

メンバであれば、DNSサーバの

アドレスはドメインコントロー

ラのIPアドレスになっている

はずです。(管理者がちゃんと

設定していれば)

これでドメインオブジェクトを

取得できます。

サンプルアプリケーションの初期画面

ドメインを取得して画面下部に接続先を表示しています。

14

15

IISの認証方法による違い

画面上部にログオンユーザを表示して、認証方法による違いを見てみましょう。

左:Windows 認証

中:匿名認証(NETWORK SERVICE)

右:匿名認証(IUSER)

Windows 認証では「ドメイン名\ユーザ名」が表示されます。

ドメイン関連情報画面

16

17

Domain オブジェクトの取得方法

クラスライブラリ側に Active Directory のオブジェクトにアクセスするための静的メソッド・プロパティを提供する DirectoryAccess クラスを作成して、そこに Domain オブジェクトを取得するメソッドを追加します。

VBPublic Shared Function GetDomain() As DomainReturn Domain.GetComputerDomain()

End Function

C#public static Domain GetDomain(){return Domain.GetComputerDomain();

}

環境や条件などに合わせて内部実装を Domain.GetCurrentDomain メソッドやDomain.GetDomain メソッドで取得するようにします。

18

クライアントの設定ができてないと・・・

Domain オブジェクトを取得できず、例外が発生します。

前ページの GetDomain メソッドの内部実装が

1. Domain.GetComputerDomain メソッドの場合の例外とメッセージの例

ActiveDirectoryObjectNotFoundException

ローカル コンピューターがドメインに参加していないか、ドメインが接続不可能です。

2. Domain.GetCurrentDomain メソッドの場合の例外とメッセージの例

ActiveDirectoryOperationException

現在のセキュリティ コンテキストは、Active Directory ドメインまたはフォレストに関連付けられていません。

3. Domain.GetDomain メソッドの場合の例外とメッセージの例

2. と同じあるいは ActiveDirectoryServerDownException

サーバーは使用可能ではありません。 名前: “virtual.proceed.local"

主なクラス・プロパティ

Domain.Forest プロパティ(フォレスト)

Forest クラス(フォレスト)

Name プロパティ(フォレストの名前)

ForestMode プロパティ(フォレストの操作モード)

RootDomain プロパティ(フォレスト内で作成された最初のドメイン)

GlobalCatalogs プロパティ(フォレスト内のすべてのグローバル カタログ)

Domains プロパティ(フォレスト内のすべてのドメイン)

Sites プロパティ(フォレスト内のすべてのサイト)

SchemaRoleOwner プロパティ(FSMO スキーママスタ)

NamingRoleOwner プロパティ(FSMO ドメイン名前付けマスタ)

19

主なクラス・プロパティ

GlobalCatalog クラス(グローバル カタログ サーバ:グローバル カタログの

レプリカをホストするドメイン コントローラ)

20

主なクラス・プロパティ

ActiveDirectorySite クラス(速度とコストの点で接続状況が良好な一連のドメ

イン コントローラを定義し、1つ以上の IP サブネットのセットで構成される)

Servers プロパティ(サイト内のディレクトリ サーバ)

Subnets プロパティ(サイト内のサブネット)

SiteLinks プロパティ(このサイトに含まれるサイト リンク)

ActiveDirectorySubnet クラス(フォレストのサブネット)

21

主なクラス・プロパティ

ActiveDirectorySiteLink クラス(複製を目的として、均一のコストで特定の

トランスポートを経由した通信をスケジュールできる複数のサイトの集合)

Cost プロパティ(サイトリンクのコスト)

ReplicationInterval プロパティ(サイト間の複製の間隔)

TransportType プロパティ(サイト リンクのトランスポート タイプ)

22

主なクラス・プロパティ

Domain クラス(Active Directory ドメイン)

Name プロパティ(ドメイン名)

DomainMode プロパティ(ドメインの動作モード)

DomainControllers プロパティ(ドメイン内のドメイン コントローラ)

RidRoleOwner プロパティ(FSMO RID プールマスタ)

PdcRoleOwner プロパティ(FSMO PDC エミュレータ)

InfrastructureRoleOwner プロパティ(FSMO インフラストラクチャマスタ)

23

主なクラス・プロパティ

DomainController クラス(ドメイン コントローラ)

Name プロパティ(ドメイン コントローラ名)

OSVersion プロパティ(OS)

IPAddress プロパティ(IPアドレス)

SiteName プロパティ(所属しているサイトの名前)

Domain プロパティ(所属しているドメイン)

Forest プロパティ(所属しているフォレスト)

ブログにも書いてます。

http://blogs.wankuma.com/mitchin/

24