2011-01-20 3 views
1

В настоящее время пользователи регистрируются в веб-приложении со своими учетными данными AD (активный каталог), которые проверяются против AD. Как только внутри приложения, некоторым пользователям потребуется обновить AD. Когда я жестко задаю имя пользователя/пароль, я могу обновить AD, однако, когда я пытаюсь заставить объект использовать учетные данные для входа в систему или если я не укажу имя пользователя/пароль, он выдает ошибку. Очевидно, из-за проблем с безопасностью я не хочу жестко указывать учетные данные. Есть ли решение для этого?Обновление Active Directory без жесткого кодирования имя пользователя/пароль

Ошибка - System.DirectoryServices.DirectoryServicesCOMException: Произошла операционная ошибка.

Public Shared Sub SetProperty(ByVal de As DirectoryEntry, ByVal propName As String, ByVal propValue As String) 
     If Not propValue Is Nothing Then 
      If de.Properties.Contains(propName) Then 
       de.Properties(propName)(0) = propValue 
      Else 
       de.Properties(propName).Add(propValue) 
      End If 
     End If 
    End Sub 

    Public Shared Function GetDirectoryEntry(ByVal path As String) As DirectoryEntry 
     Dim de As New DirectoryEntry() 
     de.Path = path 
     de.Username = "<username>" 
     de.Password = "<password>" 
     'Not setting the username or password or setting both to Nothing throws the error 
     de.AuthenticationType = AuthenticationTypes.Secure 
     Return de 
    End Function 

    Dim de As DirectoryEntry = GetDirectoryEntry("<path>") 
    Dim searcher As DirectorySearcher = New DirectorySearcher(de) 
    searcher.Filter = "(&(objectCategory=person)(objectClass=user)(cn=" & fullName & "))" 
    searcher.SearchScope = SearchScope.SubTree 
    Dim result As SearchResult = searcher.FindOne() 

    If Not result Is Nothing Then 
     Dim deResult As New DirectoryEntry(result.Path) 
     SetProperty(deResult, "accountExpires", toAccountExpirationDate) 
     deResult.CommitChanges() 
     deResult.Close() 
    End If 

    de.Close() 
+0

Это в winforms или asp.net? –

+0

Это asp.net, я обновлю тег. –

ответ

1

Для того, чтобы не нужно указывать учетные данные, прежде чем делать операцию, либо IIS пользователь работает под нужды иметь редактирования AD привилегии (которые по умолчанию это, безусловно, не делает), или вам необходимо установить Олицетворение и использование аутентификации Windows, чтобы она выполнялась как пользователь, просматривающий страницу.

У второго случая есть дополнительные трудности из-за того, что олицетворение не может быть «двойным прыжком», то есть веб-сервер также должен быть контроллером домена или вам нужно будет установить дополнительные дополнительные AD delegation привилегии на сервере, которые администраторы домена могут не захотеть дать вам.

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

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