Acceda a los archivos de la red compartida en la aplicación web c #

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

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. Sin embargo, no estoy muy seguro de cómo unir los puntos entre la creación del filestream y la especificación de las credenciales para usar. en la aplicación web.


Lamentablemente, la unidad no está asignada como una unidad de red en la máquina, solo está disponible para mí como recurso compartido de red, así que lamentablemente no puedo realizar 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, pero me alegra que me corrijan. 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é pedirles el uso inicial de sus credenciales y luego aplicar de forma dinámica la seguridad y darles mensajes de error significativos si se deniega el acceso … Estoy listo para jugar, pero volveré con una actualización.

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 lo último puede usar ucn \ host \, comparta de la misma manera que usaría ac: \ 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 objective, puede leer a través de http y si necesita escribir investigue webdav.

No tuve 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 para compartir. 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 el equipo servidor.

La 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 formas 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 muy bien la configuración.

Tienes algunas opciones y una de esas es la suplantación como mencionaste. 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 se vea así.

 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, puede alojar este servicio a través de un servicio de Windows muy fácilmente y, por lo tanto, ahora todo lo que necesita hacer es crear una relación con el servicio para obtener su token y está listo para 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.

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 ahora 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.