目前,用户使用其AD(活动目录)凭据登录Web应用程序,该凭据根据AD进行验证。进入应用程序后,某些用户需要更新AD。当我对用户名/密码进行硬编码时,我能够更新AD,但是当我尝试强制对象使用登录凭据时,或者如果我没有指定用户名/密码,则会引发错误。显然由于安全问题,我不想硬编码凭据。有解决方案吗?
错误 - 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 :(得分:1)
为了在执行操作之前不必指定任何凭据,用户IIS在需要具有AD编辑权限的情况下运行(默认情况下它肯定不会),或者您需要设置Impersonation并使用Windows身份验证,以便它以用户查看页面的方式运行。
由于假冒不能“双跳”,第二种情况会有额外的困难,即网络服务器也必须是域控制器,或者您必须设置一些额外的AD delegation权限您的域管理员可能不想提供的服务器。
在这种情况下,您的问题的解决方案是将运行应用程序的用户帐户更改为已具有所需权限的用户帐户。这样做的危险是任何安全漏洞都会给攻击者提供相同的权限。
或者,您可以加密某些凭据并解密以使用它们,这比硬编码稍好一些。我想让用户手动提供凭据然后使用它们的方式与目前使用硬编码的方式相同也可以。