我正在使用Windows身份验证并访问用户名。
IIdentity winId = HttpContext.Current.User.Identity;
string name = winId.Name;
但我希望获得其他详细信息,例如用户全名和EmailID。
答案 0 :(得分:14)
由于您使用的是Windows网络,因此您需要查询Active目录以搜索用户,然后获取其属性,例如电子邮件
以下是在Windows身份验证网络上给出DisplayUser
的示例函数IIdentity
,找到用户的email
:
public static void Main() {
DisplayUser(WindowsIdentity.GetCurrent());
Console.ReadKey();
}
public static void DisplayUser(IIdentity id) {
WindowsIdentity winId = id as WindowsIdentity;
if (id == null) {
Console.WriteLine("Identity is not a windows identity");
return;
}
string userInQuestion = winId.Name.Split('\\')[1];
string myDomain = winId.Name.Split('\\')[0]; // this is the domain that the user is in
// the account that this program runs in should be authenticated in there
DirectoryEntry entry = new DirectoryEntry("LDAP://" + myDomain);
DirectorySearcher adSearcher = new DirectorySearcher(entry);
adSearcher.SearchScope = SearchScope.Subtree;
adSearcher.Filter = "(&(objectClass=user)(samaccountname=" + userInQuestion + "))";
SearchResult userObject = adSearcher.FindOne();
if (userObject != null) {
string[] props = new string[] { "title", "mail" };
foreach (string prop in props) {
Console.WriteLine("{0} : {1}", prop, userObject.Properties[prop][0]);
}
}
}
给出这个:
编辑:如果您收到'错误的用户/密码错误' 运行代码的帐户必须具有访问用户域的权限。如果您在asp.net中运行代码,那么Web应用程序必须在具有域访问权限的应用程序池下运行。有关详细信息,请参阅here
答案 1 :(得分:-1)
您可以通过覆盖MyCustomIdentity
来定义IIdentity
并添加您自己的属性等。
答案 2 :(得分:-2)
将其投射到特定身份,例如WindowsIdentity