¿Cómo puedo exigir el acceso a un recurso compartido de Windows en una aplicación cliente pesado .NET?

StackOverflow https://stackoverflow.com/questions/940529

Pregunta

Tenemos un cliente pesado que necesita tener acceso a recursos en un recurso compartido donde un cliente no puede iniciar sesión. El cliente podría estar en un dominio de Windows o podría ser un entorno mixto sin un dominio, por lo que el usuario tendría que iniciar sesión en el servidor de forma local. En el pasado, un trabajo alrededor era crear un acceso directo en el escritorio del usuario a la acción, lo que abre el Explorador de Windows, lo que abre una solicitud de contraseña que concede o deniega el acceso al recurso compartido. ¿Cómo puedo conseguir que el usuario de inicio de sesión a la parte sin depender de Explorador de Windows? ¿Qué hacer el Explorador de Windows que puedo tener mi aplicación hacer para exigir el acceso a la participación?

He leído los archivos de Access de recurso compartido de red en c # web aplicación, pero estoy haciendo esto en una aplicación Windows Forms y quiero que sea interactivo. También he leído Cómo solicitar una contraseña , sino que simplemente le pide el código para las cadenas de usuario en vez de invocar la interfaz de usuario que demanda y concede acceso al recurso compartido. Yo preferiría no tener mi aplicación conoce la contraseña del usuario tanto como desencadenante del sistema operativo para exigir el acceso a los recursos de red.

¿Fue útil?

Solución

Se puede echar un vistazo a las CredUIPromptForCredentials API Win32 (o CredUIPromptForWindowsCredential si se está ejecutando en Vista / Win2k8, debe comprobar el winver decidir qué llamada a hacer).

Este método en realidad invoca las credenciales regulares pronta, pero se obtiene las credenciales (horrible, lo sé).

código de ejemplo mostrando cómo llamar a este la función de C # (en la muestra PInvoke usted tiene que pasar por las banderas CREDUI_FLAGS.DO_NOT_PERSIST si ha especificado falsa en Guardar. raro, lo sé).

Más información (y una muestra no administrado) en el gran Keith brown Wikibook en la seguridad

Una vez que obtenga las credenciales (en una cadena segura) a continuación, puede suplantar al usuario llegar al recurso (usando logonuser).

Y es feo. Entiendo que desea que Windows para mostrar el diálogo de consulta estándar y que no quiero saber acerca de las credenciales.

Me pregunto si un hack feo como el uso de System.Diagnostics.Process para lanzar un explorer.exe oculto en la UNC remoto no haría el truco. Habría que encontrar una manera de esperar a que el usuario ha introducido las credenciales y luego matar el proceso explorador generado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top