Pregunta

Tengo una ASP.NET sitio web en un Servidor Windows 2003 server, que necesita para acceder a los archivos desde un recurso compartido de red.El recurso compartido de red está protegida por contraseña y necesita un nombre de usuario y la contraseña que le sea proporcionada.

Puedo usar la autenticación basada en formularios en el sitio web y no basados en windows.

Así que mi problema es que cuando trato de leer cualquier archivo desde el networkshare utilizando el siguiente código, lanza de acceso denegado DirectoryInfo networkShare = new DirectoryInfo("\ estServer\Share");

Así que he intentado utilizar hacerse pasar por proporcionar el nombre de usuario y la contraseña del recurso compartido de red para suplantar la llamada a la función, sin embargo, la llamada evidentemente no, ya que el nombre de usuario no existe en el ASP.NET servidor web.Eso me pasa el nombre de usuario y la contraseña de inicio de sesión que no existe en el servidor de la web, así que esta vez la suplantación de llamada funciona sin embargo todavía no se puede acceder al recurso compartido de red 'cuz el recurso compartido de red nombre de usuario y la contraseña son diferentes.

Así que, finalmente, he creado el mismo nombre de usuario/contraseña en el servidor de la web que coincida con el recurso compartido de red.Esta vez suplantar la identidad de llamada de función no funciona y lo hace de recurso compartido de red.Soy capaz de leer correctamente desde el recurso compartido.

Así que mi pregunta es, hay alguna manera de que pueda leer el recurso compartido de red sin necesidad de añadir el nombre de usuario en el servidor web.Porque cada vez que el recurso compartido de red de inicio de sesión de los cambios, voy a tener que volver a hacer un nuevo nombre de usuario en el servidor de la web también.Que no es lo ideal.

Alguna idea?

¿Fue útil?

Solución

La forma "correcta" de hacer esto es ejecutar AppPool del servidor web como la identidad que pueden acceder al recurso compartido. De esta manera, el único almacenamiento de credenciales se realiza de forma segura en la configuración de IIS (en lugar de en el código o en los ficheros de configuración legibles). Poner el servidor web y el servidor de archivos en el mismo dominio de Windows (o diferentes dominios con confianza) es la forma más fácil, pero lo "mismo nombre de usuario / contraseña" debe trabajar allí también.

Si no se preocupan por poner nombres de usuario / contraseñas en el código o configuración, puede P / Invoke para WNetAddConnection2 y pasar el nombre de usuario / contraseña-entonces usted debería ser capaz de acceder al recurso compartido. Esto no requiere que el servidor web para tener una cuenta de juego, pero que realmente debe asegurar la contraseña (mirar en System.Security.Cryptography.ProtectedData para el almacenamiento de registro cifrada).

Otros consejos

Probar

WebRequest request = WebRequest.Create( "http://server/file.xml" );
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "user", "pass" );

request.GetResponse();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top