如何在asp.net Windows身份验证中获取用户详细信息

时间:2010-10-21 09:50:39

标签: asp.net

我正在使用Windows身份验证并访问用户名。

IIdentity winId = HttpContext.Current.User.Identity;
string name = winId.Name;

但我希望获得其他详细信息,例如用户全名和EmailID。

3 个答案:

答案 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]);
        }
    }
}

给出这个: alt text

编辑:如果您收到'错误的用户/密码错误' 运行代码的帐户必须具有访问用户域的权限。如果您在asp.net中运行代码,那么Web应用程序必须在具有域访问权限的应用程序池下运行。有关详细信息,请参阅here

答案 1 :(得分:-1)

您可以通过覆盖MyCustomIdentity来定义IIdentity并添加您自己的属性等。

答案 2 :(得分:-2)

将其投射到特定身份,例如WindowsIdentity