c# - 以不同方式获取用户主体时获取电子邮件地址的不同结果
问题描述
这是一些代码。
在一种方式中,我从 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。
解决方案
推荐阅读
- azure - 使用 MSI 从 ADF 调用 Azure 函数
- linux - proxmox 6.1 virtualbox 中未安装软件包
- apache-beam - PCollections Apache Beam 中的行比较
- python - Python 读取非空白 .txt 文件的结果为空行
- html - BootStrap 抽搐嵌入播放器以使用整个父母的宽度
- python - /api/products/1 save() 的 TypeError 缺少 1 个必需的位置参数:'self'
- git - 当我的历史丢失时,如何从另一个回购中获得提交?
- javascript - 为什么useState只有在你第二次点击按钮时才设置数据?
- java - Apache HTTP/2 客户端 5.0 POST 请求缺少有效负载/内容
- c# - 返回轮播页面中当前页面列表项的属性