カスタム MembershipProvider クラスで Active Directory を使用して、ASP.NET 2.0 イントラネット アプリケーションでユーザーを認証し、ユーザーの sid をアプリケーションのプロファイルに関連付けています。
ActiveDirectoryMembershipProvider
を使用する場合、 のProviderUserKey
オブジェクトMembershipUser
は次のとおりです。
SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey;
string sidValue = sid.ToString();
/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */
私が理解しているようにYY
、名前空間内のプリンシパルです (グループ/ドメインとも呼ばれます)。
カスタム MembershipProvider を使用する場合objectSid
、DirectoryEntry オブジェクトのプロパティを使用して sid を取得できます。
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" */
このsidValue
場合の は、 principal が含まれていないことを除いて同じですYY
。
私の質問は2つあります
- 個人を一意に識別するためにプリンシパルは必要ですか?
- DirectoryEntry オブジェクトから (または で利用可能な他のクラスを介して) プリンシパルを取得することは可能
System.DirectoryServices
ですか?
編集:
さらに読んだ結果 ( {1} {2} )、ユーザーがあるグループ/ドメインから別のグループ/ドメインに移動すると、sid が変更される可能性があることがわかりました。これに照らして、でGUID
定義されたを使用DirectoryEntry
Properties["objectGUID"]
することは、ユーザーを一意に識別するためのより良い選択でしょうか?