.NET和Active Directory-System.Exception:拒绝常规访问错误

.NET和Active Directory-System.Exception:拒绝常规访问错误,.net,active-directory,.net,Active Directory,当我尝试创建一个新用户时,我总是会遇到这个错误 这是我的代码中给出错误的部分: Public Function CreateAdAccount(ByVal sUserName As String, ByVal sPassword As String, ByVal sFirstName As String, ByVal sLastName As String, ByVal sGroupName As String) As Boolean Dim bResult As Boolean = Tr

当我尝试创建一个新用户时,我总是会遇到这个错误

这是我的代码中给出错误的部分:

Public Function CreateAdAccount(ByVal sUserName As String, ByVal sPassword As String, ByVal sFirstName As String, ByVal sLastName As String, ByVal sGroupName As String) As Boolean
   Dim bResult As Boolean = True
   Dim dirEntry As New DirectoryEntry(ADFullPath)

   SetCultureAndIdentity()

   ' 1. Create user account
   Dim adUsers As DirectoryEntries
   Dim newUser As DirectoryEntry

   If Not UserExists(sUserName) Then
      Try
         adUsers = dirEntry.Children
         newUser = adUsers.Add("CN=" & sUserName, "user")

         ' 2. Set properties
         SetProperty(newUser, "givenname", sFirstName)
         SetProperty(newUser, "sn", sLastName)
         SetProperty(newUser, "SAMAccountName", sUserName)
         SetProperty(newUser, "userPrincipalName", sUserName)
         SetProperty(newUser, "displayName", sFirstName & " " & sLastName)

         Try
            newUser.CommitChanges()
         Catch ex As Exception
            Err.Raise(4938, "clsSource", ex.Message)
         End Try
错误发生在此行:
newUser.CommitChanges()


我似乎不明白为什么它老是坏。我试图以管理员的身份登录到AD并创建一个新用户。它工作得很好

如果您使用的是.NET 3.5及更高版本,则应检查
系统.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:

基本上,您可以定义域上下文并轻松创建新用户:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// create a new user
UserPrincipal newUser = new UserPrincipal(ctx);

// define properties
newUser.GivenName = sFirstName;
newUser.Surname = sLastName;
newUser.SamAccountName = sUserName;
newUser.UserPrincipalName = sUserName;
newUser.DisplayName = sFirstName + " " + sLastName;

// save changes
newUser.Save();
我不确定您在
sUserName
中有什么内容,但是
.UserPrincipalName
属性应该总是类似于
someuser@somedomain.com
-您的用户名是否包含此值?如果没有-可能尝试使用这种符号作为您的用户主体名称


新的S.DS.AM使得在AD中与用户和组进行交互变得非常容易:

代码实际上是在什么环境下运行的?这是web应用程序/windows应用程序吗?如果它作为web应用程序运行,则web应用程序运行的上下文,即应用程序池可能没有足够的权限将其作为web应用程序。我没有意识到我必须把它放在不同的应用程序池中。。。我现在去看看。我是否在IIS或AD中设置池权限?您不必将其放在其他应用程序池中,您有两个选项,您可以在拨打电话之前模拟身份,并且不更改应用程序池设置,或者,您可以创建一个单独的应用程序池,并使该应用程序池在具有AD权限的域帐户的上下文下运行,等等,由于web应用程序将查询AD,因此进行调用的安全上下文需要具有适当的权限,有两种不同的方法来实现这一点。我补充道“模拟”到我的web配置,看起来它起作用了:)也正如你所知,现在整个应用程序将在访问用户的凭据下运行,这在某些情况下可能不可取,仅供参考。