0

如果我们参考 的文档System.DirectoryServices.AccountManagement.IdentityType,它将标识IdentityType.Name为“身份是名称”,仅此而已。这是什么名字?它期望什么格式?

这不起作用:

UserPrincipal.FindByIdentity(myContext, IdentityType.Name, "John Doe");

这也不是:

UserPrincipal.FindByIdentity(myContext, IdentityType.Name, "Doe, John");

也不是这个:

UserPrincipal.FindByIdentity(myContext, IdentityType.Name, "jdoe"); //The username
4

1 回答 1

3

我不确定您所说的“不起作用”是什么意思,但我认为您的意思是它返回 null 并且不会引发异常。

其工作原理的简短回答:IdentityType.Name映射到Name底层Principal对象的属性:MSDN 上的 Principal.Name 属性。如果您查看 的其他属性Principal,您会注意到它们映射到 的其他枚举IdentityType

根据您的目录的设置方式,用户的Name属性可能不是您所期望的。例如,“jdoe”实际上可能是用户的SamAccountName属性,但不是Name. 这可能是这里发生的事情,或者您的目标是错误的上下文(非预期的域或本地机器)。我会以编程方式或通过启动 dsa.msc 来仔细检查用户的属性。

除非您想专门针对该Name属性,否则请考虑使用搜索所有枚举的其他FindByIdentity方法IdentityType。然后,如果您使用下面的代码并且“jdoe”实际上是SamAccountName,您仍然会找到您正在寻找的用户:

var userPrincipal = UserPrincipal.FindByIdentity(context, "jdoe");
于 2013-09-04T03:05:45.523 回答