首页 > 解决方案 > 以不同方式获取用户主体时获取电子邮件地址的不同结果

问题描述

这是一些代码。

在一种方式中,我从 AD 获取“域用户”组,获取成员,并找到具有特定名称的帐户。

以另一种方式,我正在获取所有用户,并找到一个具有特定名称的帐户。

任何一种方式的最终结果都是应该引用同一个用户的 UserPrincipal。当我显示结果时,每个 UserPrincipal 的 Sid 是相同的,但是,生成的电子邮件地址不一样...来自第二个用户主体的电子邮件地址是正确的,并且与 AD 中的匹配。但是,从域用户组中搜索到的 UserPrincipal 的电子邮件地址是空白的。有什么理由不应该匹配吗?

        var principalContext = new PrincipalContext(ContextType.Domain);
        GroupPrincipal gp = new GroupPrincipal(principalContext);

        PrincipalSearcher groupSearcher = new PrincipalSearcher(gp);
        var groups = groupSearcher.FindAll().Where(g => { return g.Name == "Domain Users"; });
        var group = groups.First() as GroupPrincipal;
        var groupUser = group.Members.Where(m => { return m.SamAccountName == "joew"; }).First() as UserPrincipal;

        UserPrincipal up = new UserPrincipal(principalContext);
        PrincipalSearcher userSearcher = new PrincipalSearcher(up);
        var domainUser = userSearcher.FindAll().Where( u => { return u.SamAccountName == "joew"; }).First() as UserPrincipal;

        string s = $"groupUser Sid: {groupUser.Sid}, email: {groupUser.EmailAddress}\ndomainUser Sid: {domainUser.Sid}, email: {domainUser.EmailAddress}";
        MessageBox.Show(s);

结果字符串 s 是:

groupUser Sid: S-1-5-21-1523849412-1795631125-406139601-1114, email: 
domainUser Sid: S-1-5-21-1523849412-1795631125-406139601-1114, email: joew@nunyabiz.com

在我看来,我认为电子邮件地址应该是相同的。Sid 是相同的,所以 groupUser 和 domainUser 应该引用同一个用户。但是,groupUser 的电子邮件地址为空。对我来说似乎更像是一个错误,但我当然可能在这里错了。

测试应用程序是使用 .NET Framework 4.5 构建的,它运行的 AD 机器是带有 .NET Framework 4.8 的 Server 2019。

标签: c#.netwindowsactive-directory

解决方案


推荐阅读