38

Windows 認証を使用する C# および ASP.Net アプリケーションに取り組んでいます。

つまり、Web.config で:

<system.web>
    <authentication mode="Windows" />
</system.web>

Active Directory から現在のユーザーの詳細 (氏名、電子メール アドレスなど) を取得したいと考えています。


Windows 2000 以前のユーザー ログイン名 (例: SOMEDOMAIN\someuser) を取得するには、

string username = HttpContext.Current.Request.ServerVariables["AUTH_USER"];

現在のログイン名 (Windows 2000 以前のユーザーのログイン名ではない) を使用して、ユーザーの LDAP クエリを作成しました。

DirectorySearcher adSearch = new DirectorySearcher(
        "(userprincipalname=someuser@somedomain.com.au)");
SearchResult adSearchResult = adSearch.FindOne();

ただし、W2K 以前のログイン名を使用してユーザーの AD を検索する方法、または「someuser@somedomain.com.au」形式でログイン名を取得する方法がわかりません。

何か案は?

4

4 に答える 4

44

アランはすでにあなたに正しい答えを与えました-sAMAccountNameあなたのユーザーをフィルタリングするためにを使用してください。

使用に関する推奨事項を追加しますDirectorySearcher。1つまたは2つの情報のみが必要な場合は、それらをの"PropertiesToLoad"コレクションに追加しますDirectorySearcher

大きなユーザーオブジェクト全体を取得してから1つまたは2つのアイテムを選択する代わりに、必要なビットを正確に返します。

サンプル:

adSearch.PropertiesToLoad.Add("sn");  // surname = last name
adSearch.PropertiesToLoad.Add("givenName");  // given (or first) name
adSearch.PropertiesToLoad.Add("mail");  // e-mail addresse
adSearch.PropertiesToLoad.Add("telephoneNumber");  // phone number

これらは、指定する必要のある通常のAD/LDAPプロパティ名です。

于 2009-03-12T06:06:06.560 に答える
11

COM "Active DS Type Library" への参照を追加


            Int32 nameTypeNT4               = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_NT4;
            Int32 nameTypeDN                = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_1779;
            Int32 nameTypeUserPrincipalName = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_USER_PRINCIPAL_NAME;

            ActiveDs.NameTranslate nameTranslate = new ActiveDs.NameTranslate();

            // Convert NT name DOMAIN\User into AD distinguished name 
            // "CN= User\\, Name,OU=IT,OU=All Users,DC=Company,DC=com"
            nameTranslate.Set(nameTypeNT4, ntUser);

            String distinguishedName = nameTranslate.Get(nameTypeDN);

            Console.WriteLine(distinguishedName);

            // Convert AD distinguished name "CN= User\\, Name,OU=IT,OU=All Users,DC=Company,DC=com" 
            // into NT name DOMAIN\User
            ntUser = String.Empty;
            nameTranslate.Set(nameTypeDN, distinguishedName);
            ntUser = nameTranslate.Get(nameTypeNT4);
            Console.WriteLine(ntUser);

            // Convert NT name DOMAIN\User into AD UserPrincipalName Name.User@Company.com
            nameTranslate.Set(nameTypeNT4, ntUser);
            String userPrincipalName = nameTranslate.Get(nameTypeUserPrincipalName);

            Console.WriteLine(userPrincipalName);
于 2009-06-16T18:45:16.703 に答える
4

.NET 3.5 SP1+ を使用している場合、これを行うより良い方法は、

System.DirectoryServices.AccountManagement namespace.

人を見つけるメソッドがあり、必要なユーザー名形式で渡すことができ、必要な基本情報のほとんどを返すことができます。より複雑なオブジェクトとプロパティの読み込みについてサポートが必要な場合は、 http: //umanage.codeplex.comのソース コードをチェックしてください。

ブレント

于 2011-04-15T04:52:20.730 に答える