Active Directory: добавить нового пользователя C # / VB - PullRequest
0 голосов
/ 06 декабря 2018

Я просмотрел другие вопросы и не смог найти ответ.

Как правильно добавить нового пользователя в определенную группу активного каталога, если «текущий пользователь», на котором запущено приложение, не имеет доступаправа на добавление новых пользователей?

В настоящее время я аутентифицируюсь как Администратор домена, чтобы сделать это, но очевидно, что это безопасность нет-нет, и я не хочу, чтобы учетные данные пользователя Администратора были жестко закодированы в моем коде.

Я предполагаю, что ответы не в самом моем коде, а в том, что мне нужно создать пользователя в Active Directory, который имеет права для добавления пользователей.

Так что мой вопрос - это комбинация ADи вопрос о кодировании:

1) Как создать пользователя AD, который имеет ТОЛЬКО права доступа для добавления пользователей в определенную группу безопасности OU и CN?

2) Возможно ли их каким-либо образомне жесткий пароль для этого пользователя?

Или ... я совершенно не прав?

Вот мой текущий код VB.NET:

 Public Function CreateUser(ByVal UserName As String, ByVal Password As String, ByVal DisplayName As String) As Boolean
    Try

        'Dim catalog As Catalog = New Catalog()
        Dim de As DirectoryEntry = New DirectoryEntry()

        de.Path = "LDAP://OU=TS2xUsers,DC=dc,DC=example,DC=com"
        de.AuthenticationType = AuthenticationTypes.Secure
        de.Username = "Administrator"
        de.Password = "foopassword"

        '1. Create user accountd
        Dim users As DirectoryEntries = de.Children
        Dim newuser As DirectoryEntry = users.Add("CN=" & DisplayName, "user")
        newuser.Properties("givenname").Value = DisplayName
        newuser.Properties("name").Value = DisplayName
        newuser.Properties("displayName").Value = DisplayName
        newuser.Properties("SAMAccountName").Value = UserName
        newuser.Properties("userPrincipalName").Value = UserName & "@dc.example.com"
        'newuser.Properties("OU").Value = "TS2xUsers"

        newuser.CommitChanges()


        Dim ret As Object = newuser.Invoke("SetPassword", Password)
        newuser.CommitChanges()

        Dim exp As Integer = CInt(newuser.Properties("userAccountControl").Value)
        exp = exp And Not &H2 'enable acccount
        exp = exp Or &H10000 'dont expire password
        newuser.Properties("userAccountControl").Value = exp
        newuser.CommitChanges()
        ''' 5. Add user account to groups
        If MakeTSUser(newuser) = False Then
            Return False
            newuser.Close()
            de.Close()
        End If

        newuser.Close()
        de.Close()
        Return True


    Catch ex As Exception
        MsgBox("Failed to create user due to the following reason: " & ex.Message, MsgBoxStyle.Critical)
        Return False
    End Try

End Function

Private Function MakeTSUser(ByVal deUser As DirectoryEntry) As Boolean
    Try


        Dim deRBGroup As New DirectoryEntry
        deRBGroup.Path = "LDAP://CN=TSUsers,CN=Builtin,DC=dc,DC=example,DC=com"
        deRBGroup.AuthenticationType = AuthenticationTypes.Secure
        deRBGroup.Username = "Administrator"
        deRBGroup.Password = "foopassword"

        Dim deDomainUsers As New DirectoryEntry
        deDomainUsers.Path = "LDAP://CN=Domain Users,CN=Users,DC=dc,DC=example,DC=com"
        deDomainUsers.AuthenticationType = AuthenticationTypes.Secure
        deDomainUsers.Username = "Administrator"
        deDomainUsers.Password = "foopassword"

        Dim primaryGroupToken As Object = Nothing

        deRBGroup.Invoke("Add", New Object() {deUser.Path.ToString()})
        deRBGroup.CommitChanges()

        'Get Primary Group Token of MYGROUP

        deRBGroup.Invoke("GetInfoEx", New Object() {New Object() {"primaryGroupToken"}, 0})

        primaryGroupToken = deRBGroup.Properties("primaryGroupToken").Value


        'Assign Primary Group Token value of MYROUP to the User's PrimaryGroupID

        deUser.Properties("primaryGroupID").Value = primaryGroupToken

        deUser.CommitChanges()


        'Remove the User from "Domain Users" group
        deDomainUsers.Invoke("Remove", New Object() {deUser.Path.ToString()})
        deDomainUsers.CommitChanges()

        Return True
    Catch ex As Exception
        Return False
    End Try


End Function

1 Ответ

0 голосов
/ 06 декабря 2018

Как правильно добавить нового пользователя в определенную группу активного каталога, если «текущий пользователь», на котором запущено приложение, не имеет прав доступа для добавления новых пользователей?

Запустите приложение как пользователь, у которого есть эти разрешения ... но вы уже знаете это:

Я предполагаю, что ответы ... создать пользователя в Active Directory с правами на добавлениепользователи.

Можно ли каким-либо образом не вводить пароль для этого пользователя жестко?

Хороший вопрос.Один из способов сделать это - настроить запланированное задание Windows.Вы можете настроить запуск задачи по требованию без фактического расписания и запуск от имени любого пользователя, включая новую учетную запись службы.Вам нужно будет ввести пароль для этого пользователя при настройке задачи, но только при первой настройке задачи, и фактический пароль не будет сохранен ... только токен аутентификации, который не подлежит передаче.После этого приложение для настольного компьютера может запустить задачу.

Еще один способ сделать это - предоставить непривилегированным пользователям HR или пользователям службы поддержки, которые запускают ваше приложение, разрешение создавать новых пользователей только в пределах вашего конкретного подразделения * 1016.*.В случае с веб-приложением вы также можете сделать это для учетной записи пользователя, которая запускает веб-сайт, при условии наличия соответствующей регистрации и аудита.

Другой вариант заключается в создании отдельной службы.создать пользователей, которые запускаются от имени соответствующего пользователя.Это может быть веб-служба, в которой аутентифицированные пользователи с низким уровнем привилегий могут публиковать информацию о новой учетной записи, или это может быть служба Windows, выполняющая что-то вроде просмотра общего файлового ресурса, где ваши непривилегированные пользователи затем могут или могут записать в общий файловый ресурс.Тогда ваша программа сможет узнать, как позвонить в службу или записать правильные форматы файлов в общий ресурс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...