web-dev-qa-db-ja.com

.NETWebアプリケーションにログインしているユーザーのUPNまたは電子メールを取得する

私は.NET開発者ではないので、次のような人にとっては些細なことだと思います。

ログインしたユーザーのユーザー資格情報をユーザーに作成するC#Webアプリケーションがあります。現在、からのSIDを使用しています

System.Security.Principal.WindowsIdentity.GetCurrent().User.Value 

SIDの代わりに、ユーザーのUPNログインまたは電子メールアドレス(Active Directoryで定義されている)のいずれかを取得する必要があります。 GetCurrent()は、WindowsIdentity型のオブジェクトを返します。 WindowsIdentityメンバーの詳細を調べる:

MSDN:WindowsIdentityメンバー

UPNまたはメールのいずれかが表示されるように見えるものは何も表示されません。 SIDを他の関数にフィードするか、最初に別の関数を呼び出すことによって、使用する情報を取得するにはどうすればよいですか。

22
DrStalker

一方(.NET 3.5)これはワンライナーです:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress

メールの場合、または

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName

uPNの場合。

41
Kiki

ディレクトリサーチャーを使用してActiveDirectoryにクエリを実行するには、次のような操作を行う必要があります(完全にテストされていないコード)。

    string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    string ldapPath = "LDAP://domain.company.com";

    public string GetEmail(string userName, string ldapPath)
    {
        using (DirectoryEntry root = new DirectoryEntry(ldapPath))
        {
            DirectorySearcher searcher = new DirectorySearcher(root);
            searcher.Filter = string.Format(@"(&(sAMAccountName={0}))", userName);
            searcher.PropertiesToLoad = "mail";

            SearchResult result = searcher.FindOne();

            if (result != null)
            {
                PropertyValueCollection property = result.Properties["mail"];
                return (string)property.Value;
            }
            else
            { 
                // something bad happened
            }
        }
    }
2
Alex Peck

試してください:

System.Security.Principal.WindowsIdentity.GetCurrent().Name
1
Jimmy Chandra