2009-08-12 11 views
5

カスタムMembershipProviderクラスでActive Directoryを使用して、ASP.NET 2.0イントラネットアプリケーションのユーザーを認証し、そのsidをプロファイルに関連付けますアプリケーション。ASP.NET - DirectoryEntry/SIDのプリンシパル/相対識別子(RID)を取得

ActiveDirectoryMembershipProviderが使用される場合

SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey; 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */ 

を次のように私はそれを理解するように、MembershipUserためProviderUserKeyオブジェクトがYYが名前空間内プリンシパル(また、グループ/ドメインとも呼ばれる)です。それは主要なYYが含まれていない以外

カスタムのMembershipProviderを使用している場合、私はこのケースでsidValue DirectoryEntryオブジェクト

DirectoryEntry entry = new DirectoryEntry(path, username, password); 
SecurityIdentifier sid = new SecurityIdentifier((byte[])entry.Properties["objectSid"].Value, 0); 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX" */ 

objectSidプロパティを使用してSIDを取得することができますが、同じです。

私の質問は2倍

  1. では、個人を一意に識別するために必要な主要ですか?
  2. DirectoryEntryオブジェクト(またはSystem.DirectoryServicesで利用可能なその他のクラス)からプリンシパルを取得できますか?

EDIT:

いくつかは、さらに({1}{2})を読み終わったので、私は今、ユーザーが別のグループ/ドメインから移動された場合、SIDを変更することができることを知っています。これを踏まえて、をDirectoryEntryProperties["objectGUID"]に定義すると、ユーザーを一意に識別するのに適していますか?

答えて

3

ユーザーGUYIDは、ユーザーアカウントを識別するための最良の選択です。 objectGUIDは一意であり、アカウントのインスタンスに対して固定されているため、これを強調します。同じdistinguishedNameを持つアカウントを削除して再作成すると、別のobjectGUIDが取得されます。したがって、objectGUIDはユーザーを識別せず、アカウントを識別します。

アカウントを識別するには、objectGUIDを使用します。

アカウントを削除して管理者が問題を解決するために再作成することがあります。これが発生した後でもユーザーを特定する必要がある場合は、アカウントオブジェクトで別のものを選択する必要があります。おそらくあなたのアカウント定義ポリシーに依存する必要があります。たぶんあなたはsAMAccountNamesがユーザーの名前に基づいていないのでしょうか?管理者がemployeeidまたはemployeeNumberを入力している可能性がありますか?多分displayNamesの一意性を強制するでしょうか?

ここにAD attribute infoへのリンクがあります。 ここにDirectoryEntry Propertiesへのリンクがあります。

+0

objectGUIDは、アカウントのGUIDまたはディレクトリエントリが表すオブジェクトの種類のGUIDですか?また、各ディレクトリエントリプロパティの詳細を提供するドキュメントへのリンクもありますか? –

+0

個々のアカウントのGUIDです。 ADSI編集MMCスナップイン(http://technet.microsoft.com/en-us/library/cc773354(WS.10).aspx)を使用している場合は、Active Directoryで確認できます。 – serialhobbyist

+0

私はメインのポストへのリンクを追加しました。以前のリンクは少し混乱しているようでした。 DirectoryEntryオブジェクトまたはADオブジェクトのプロパティを必要としているかどうかはわかりませんでした。後者の場合、ADの人々は属性としてそれらについて話す傾向があります。したがって、ADクラスのインスタンス(userなど)には、displayNameなどの属性があります。 DirectoryEntryのインスタンスには、属性のコレクションとその値を含むPropertiesプロパティがあります。それはAttributes、IMOと呼ばれるべきです。 – serialhobbyist

関連する問題