私は.NET開発者ではないので、次のような人にとっては些細なことだと思います。
ログインしたユーザーのユーザー資格情報をユーザーに作成するC#Webアプリケーションがあります。現在、からのSIDを使用しています
System.Security.Principal.WindowsIdentity.GetCurrent().User.Value
SIDの代わりに、ユーザーのUPNログインまたは電子メールアドレス(Active Directoryで定義されている)のいずれかを取得する必要があります。 GetCurrent()は、WindowsIdentity型のオブジェクトを返します。 WindowsIdentityメンバーの詳細を調べる:
UPNまたはメールのいずれかが表示されるように見えるものは何も表示されません。 SIDを他の関数にフィードするか、最初に別の関数を呼び出すことによって、使用する情報を取得するにはどうすればよいですか。
一方(.NET 3.5)これはワンライナーです:
System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress
メールの場合、または
System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName
uPNの場合。
ディレクトリサーチャーを使用して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
}
}
}
試してください:
System.Security.Principal.WindowsIdentity.GetCurrent().Name