Hola, cómo están ? Este es un caso bastante raro y por lo que he leído les ha pasado a otros y no hay una solución muy a la mano. Voy resumirles, se trata de una aplicación web (intranet) que tiene todos los enlaces públicos excepto uno que es restringido. Para entrar a esa página implementé un formulario para autenticar con seguridad integrada Windows (Active Directory de Windows 2000). La autenticación es una función que usa la clase DirectoryEntry y hace la búsqueda. Luego, con el usuario autenticado llama a otra función que se encarga de levantar todos los roles (grupos del Active Directory) a los que pertence el usuario y para eso utiliza la clase DirectorySearcher. Lo raro de todo ésto es que funciona correctamente en el servidor local, es decir en la PC de desarrollo con el site instalado en localhost. El IIS está bien configurado, no hay problema de permisos, todo bien. El asunto es al entrar desde otra PC, cuando va a ejecutar la segunda función da un error de operación en Dim result As SearchResult = search.FindOne(). Les paso el código de las funciones por si lo quieren chequear. Alguien sabe que puede pasar ?. Gracias
Public Function IsAuthenticated(ByVal domain As String, ByVal user As String, ByVal pass As String) As Boolean
Dim domusr as string
domusr = domain & "\" & user
Dim entry As DirectoryEntry = New DirectoryEntry(_path & Domain, domusr, pass, AuthenticationTypes.Secure)
Try
Dim obj As Object = entry.NativeObject
Dim search As DirectorySearcher = New DirectorySearcher(entry)
search.Filter = "(SAMAccountName=" & user & ")"
search.PropertiesToLoad.Add("cn")
Dim result As SearchResult = search.FindOne()
If (result Is Nothing) Then
Return False
End If
_path = result.Path
_filterAttribute = CType(result.Properties("cn")(0), String)
Catch ex As Exception
Throw New Exception("Error en la autenticación. " & ex.Message)
End Try
Return True
End Function
Public Function GetGroups() As String
Dim search As DirectorySearcher = New DirectorySearcher(_path)
search.Filter = "(cn=" & _filterAttribute & ")"
search.PropertiesToLoad.Add("memberOf")
Dim groupNames As StringBuilder = New StringBuilder()
Try
Dim result As SearchResult = search.FindOne()
Dim propertyCount As Integer = result.Properties
"memberOf").Count
Dim dn As String
Dim equalsIndex, commaIndex
Dim propertyCounter As Integer
For propertyCounter = 0 To propertyCount - 1
dn = CType(result.Properties("memberOf")(propertyCounte r), String)
equalsIndex = dn.IndexOf("=", 1)
commaIndex = dn.IndexOf(",", 1)
If (equalsIndex = -1) Then
Return Nothing
End If
groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1))
groupNames.Append("|")
Next
Catch ex As Exception
Throw New Exception("Error obteniendo grupos " & ex.Message)
End Try
Return groupNames.ToString()
End Function