加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:26:11 所属栏目:asp.Net 来源:网络整理
导读:我正在使用 Windows身份验证和访问用户名. IIdentity winId = HttpContext.Current.User.Identity;string name = winId.Name; 但我想获得其他详细信息,如用户全名和EmailID. 解决方法 由于您在Windows网络上,因此您需要查询Active Directory以搜索用户,然后
我正在使用 Windows身份验证和访问用户名.
IIdentity winId = HttpContext.Current.User.Identity;
string name = winId.Name;

但我想获得其他详细信息,如用户全名和EmailID.

解决方法

由于您在Windows网络上,因此您需要查询Active Directory以搜索用户,然后获取其属性,如电子邮件

这是一个示例函数DisplayUser,它在Windows身份验证的网络上给出了一个IIdentity,找到用户的电子邮件:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读