5

カスタム 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つあります

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

編集:

さらに読んだ結果 ( {1} {2} )、ユーザーがあるグループ/ドメインから別のグループ/ドメインに移動すると、sid が変更される可能性があることがわかりました。これに照らして、でGUID定義されたを使用DirectoryEntry Properties["objectGUID"]することは、ユーザーを一意に識別するためのより良い選択でしょうか?

4

1 に答える 1

3

The objectGUID is the best choice for identifying a user account. I highlight this because the objectGUID is unique and fixed for an instance of an account. If you delete and recreate the account with the same distinguishedName you'll get a different objectGUID. So, objectGUID doesn't identify the user, it identifies the account.

So, if you want to identify the account, use objectGUID.

Sometimes, accounts can be deleted and recreated by admins to solve problems. If you need to identify the user even after this has happened, you need to pick something else on the account object. That will probably have to depend on your account definition policies. Maybe you have sAMAccountNames that are not based on the user's name? Maybe the admins populate employeeid or employeeNumber? Maybe they enforce uniqueness for displayNames?

Here's a link to AD attribute info. Here's a link to DirectoryEntry Properties.

于 2009-08-12T17:23:44.577 に答える