.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配置,看起来它起作用了:)也正如你所知,现在整个应用程序将在访问用户的凭据下运行,这在某些情况下可能不可取,仅供参考。