カスタム 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"]することは、ユーザーを一意に識別するためのより良い選択でしょうか?