2008-08-27 117 views
8

Tengo una aplicación web que necesita para leer (y posiblemente escribir) archivos de una red compartida. Me preguntaba cuál sería la mejor manera de hacer esto.Acceder a los archivos de la red compartida en la aplicación web C#

No puedo dar acceso al servicio de red o a las cuentas aspnet al recurso compartido de red. Posiblemente podría usar suplantación.

El recurso compartido de red y la aplicación web están alojados en el mismo dominio y puedo crear un nuevo usuario en el dominio específicamente para este fin, pero no estoy seguro de cómo unir los puntos entre la creación de la secuencia de archivos y especificar las credenciales para usar en la aplicación web.


Por desgracia, la unidad no está asignada como unidad de red en la máquina, sólo está disponible para mí como un recurso compartido de red por lo que lamentablemente no puedo hacer una llamada transparente.

Hay un problema que se me ocurre con la suplantación ... Solo puedo suplantar a un usuario por dominio de aplicación I pensar pero estoy contento de ser corregido. Es posible que necesite escribir este archivo en varios recursos compartidos diferentes, lo que significa que debo suplantar a varios usuarios.

Me gusta la idea de crear un token ... si puedo hacer eso, podré solicitar el uso inicial de sus credenciales y luego aplicar dinámicamente la seguridad y darles mensajes de error significativos si se deniega el acceso ... Me voy a jugar, pero volveré con una actualización.

Respuesta

0

No he tenido problemas para conectarme a los recursos compartidos de red de forma transparente como si fueran unidades locales. El único problema que puede tener es lo que mencionó: tener acceso a la cuenta aspnet. La suplantación es probablemente la mejor manera de hacer esto.

Debería poder usar cualquier objeto filestream para acceder al recurso compartido de red, siempre que tenga una letra de unidad en la máquina del servidor.

0

Suplantación funcionó bien para mí en este escenario. Tuvimos un asistente que cargó un archivo zip a través del sitio web, pero cargamos el sitio equilibrado. Por lo tanto, era necesario configurar una forma de guardar el archivo en todas las máquinas.

Hay muchas maneras diferentes de hacerlo. Decidimos hacer todas las solicitudes para que se ejecutaran bajo el usuario que configuramos y solo agregamos la entrada web.config y configuramos los permisos de seguridad en las carpetas para el usuario. Este artículo kb explica la configuración muy bien.

3

Dado que todos ya tienen cuentas de dominio. Pruebe la autenticación integrada de IIS. Obtendrá una fea caja de inicio de sesión fuera de la red, pero sus créditos deberán pasar al recurso compartido de archivos.

@lomaxx
Está diciendo que solo tiene perms en el recurso o que lo mapeó manualmente en una letra de unidad. Si el último puede usar ucn \ host \ compartir de la misma manera que utilizaría una c: \ shared_folder.

Aleatorio ¿Sería una carga duplicar el recurso en una carpeta local en el host? Escuché que ROBOCOPY es bastante útil.

Otra idea. Ejecute IIS en su recurso compartido objetivo, puede leer a través de http y si necesita escribir investigue webdav.

0

Tiene algunas opciones y una de ellas es la suplantación mencionada. Sin embargo, otra que me gusta usar y he usado en el pasado es una llamada de servicio de confianza.Supongamos por un momento que siempre es mucho más seguro limitar el acceso a través de IIS para garantizar que haya tan pocos agujeros como sea posible. Con eso vamos por este camino.

Cree un servicio WCF que tenga un par de puntos de entrada y la interfaz podría tener este aspecto.

public interface IDocumentService 
{ 
    public string BuildTrustedRelationship(string privateKey); 

    public byte[] ReadFile(string token, string fileName); 

    public void WriteFile(string token, string fileName, byte[] file); 
} 

Ahora, usted puede recibir este servicio a través de un servicio de Windows muy fácilmente y por lo que ahora todo lo que tiene que hacer es en Application_start construir la relación con el servicio para obtener su ficha y que está fuera de las carreras. La otra cosa agradable aquí es que este servicio es interno, confiable e incluso lo he alojado en el servidor de archivos antes, por lo que es mucho más fácil otorgar permisos a esta operación.

0

Si puede crear un nuevo usuario de AD, creo que la solución más simple es que el grupo de aplicaciones se ejecute bajo la autoridad de esa cuenta de AD, lo que significa que su aplicación se está ejecutando como el usuario de AD. Debería agregar el usuario de AD al Grupo de procesos de trabajo de IIS en la máquina que ejecuta su aplicación. Entonces, siempre y cuando su usuario AD tenga permisos de escritura en el recurso compartido de red, debería poder usar la ruta UNC en sus operaciones de archivos.

Cuestiones relacionadas