C# 使用System.DirectoryServices.AccountManagement时发生DirectoryServices异常
我正在尝试使用System.DirectoryServices.AccountManager确定用户是否是给定组的成员C# 使用System.DirectoryServices.AccountManagement时发生DirectoryServices异常,c#,sharepoint-2007,c#-3.0,account-management,C#,Sharepoint 2007,C# 3.0,Account Management,我正在尝试使用System.DirectoryServices.AccountManager确定用户是否是给定组的成员 我在64位系统上的SharePoint 2007中的SharePoint Web部件中执行此操作 项目目标.NET3.5 在web.config中启用了模拟 有问题的IIS站点正在使用IIS应用程序池,其中域用户配置为标识 我可以将PrincipalContext实例化为: PrincipalContext pc=新PrincipalContext(ContextType.
- 我在64位系统上的SharePoint 2007中的SharePoint Web部件中执行此操作李>
- 项目目标.NET3.5
- 在web.config中启用了模拟
- 有问题的IIS站点正在使用IIS应用程序池,其中域用户配置为标识
PrincipalContext
实例化为:
PrincipalContext pc=新PrincipalContext(ContextType.Domain)
接下来,我试着抓住一位校长:
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, "MYDOMAIN\somegroup");
// snip: exception thrown by line above.
}
以上和用户SAM的UserPrincipal.FindByIdentity
都会抛出一个DirectoryServicesCOMException
:“登录失败:未知用户名或错误密码”
我已尝试将完整的SAMAccountName传递给FindByIdentity
(以MYDOMAIN\username的形式)或仅传递给用户名,但行为没有改变。我尝试过使用HostingEnvironment.Impersonate
和SPSecurity.RunWithElevatedPrivileges
方法使用其他凭据执行代码,也得到了相同的结果
我还尝试用域名实例化我的上下文:
PrincipalContext pc=newprincipalcontext(ContextType.Domain,“MYDOMAIN”)代码>
这会引发PrincipalServerDownException
:“无法联系服务器。”
我正在一台经过合理加固的服务器上工作。我没有锁定系统,所以我不确定到底对它做了什么。如果有凭据需要分配给池标识的用户或域安全策略中的用户,以便这些凭据正常工作,我可以相应地配置域。是否有任何设置会阻止我的代码运行?我是否在代码本身中遗漏了什么?这在SharePoint web中是不可能的吗
编辑:
经过进一步的测试,我的代码在针对.NET4.0的控制台应用程序中测试时功能正常。我瞄准了一个不同的框架,因为我在瞄准.NET 3.5时,由于某种原因,控制台应用程序中没有AccountManagement
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
using (UserPrincipal adUser = UserPrincipal.FindByIdentity(pc, "MYDOMAIN\joe.user"))
using (GroupPrincipal adGroup = GroupPrincipal.FindByIdentity(pc, "MYDOMAIN\user group"))
{
if (adUser.IsMemberOf(adGroup))
{
Console.WriteLine("User is a member!");
}
else
{
Console.WriteLine("User is NOT a member.");
}
}
我的SharePoint环境中的哪些变化可能会阻止此功能的执行?我将IIS应用程序池使用的帐户添加到管理员组,此问题已得到解决。您可能应该注意,这是“正义的铁拳”方法,对于面向生产或互联网的系统来说,这不是一个推荐的解决方案。@Burly-很好的观点。这适用于我的环境:断开网络上的内部系统。这不是一个我很满意的解决方案,但它是一个解决方案,所以它现在就可以了。我真的希望能得到一些指导,比如管理员有什么特权使代码能够无误地执行。我希望删除该用户的管理权限,并授予一些更安全的权限,同时按照我的要求继续操作。@antik您是否最终删除了管理权限并能够毫无例外地执行此操作?