2012-08-13 77 views
0

我想实现通过User和GroupPrincipals将AD用户添加到本地计算机组,并且我认为它会很好用和简单。不幸的是,我继续得到一般拒绝访问错误。我可能只是不理解正确的身份验证,但我认为我已经设置了正确的访问权限。这里是被称为什么代码片段:通过AccountManagement将AD用户添加到计算机本地组

var ctx = new PrincipalContext(ContextType.Machine, 
           Environment.MachineName, 
           ConfigurationManager.AppSettings["MyUser"], 
           ConfigurationManager.AppSettings["MyPW"]); 

     var grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, "LocalGrp"); 
     var adUser = ADService.GetUserByDomainUserName(vModel.ContactId); 

     var adCtx = new PrincipalContext(ContextType.Domain, 
             "myDomain.com", 
             ConfigurationManager.AppSettings["MyUser"], 
             ConfigurationManager.AppSettings["MyPW"]) 
               ; 
     var user = UserPrincipal.FindByIdentity(adCtx, 
               IdentityType.Guid, 
               adUser.UserGuid.ToString()); 

     if (grp != null && 
      user != null) 
     { 
      if(!user.IsMemberOf(grp)) 
      { 
       grp.Members.Add(user); 
       grp.Save(); 
      } 
     } 

用户发现,该组被发现,但是当我添加和到达grp.Save()步,我用常规访问被拒绝治疗例外。通过“MyUser”和“MyPW”打开ctx,我认为这将允许在机器上进行组操作,因为该帐户是机器本地管理员组的一部分。我能不能以这种方式混合机器/域环境,还是存在一个我只是缺少的身份验证问题?

回答

0

您是否以管理员模式运行Visual Studio?即使您的登录名具有管理权限,但您的程序需要提升自己才能使用这些权限,前提是您未启动该权限。

参见:

+0

我会尝试这一点,但我也跑了一个开发服务器上,它的表现同样的方式 - 拒绝即使身份的访问应用程序池(以及创建上下文时使用的用户名/密码)是机器管理员组的一部分。 – 2012-08-13 18:49:52

相关问题