Aprire una cartella da REMOTO

mercoledì 03 dicembre 2008 - 10.59

kintaro Profilo | Junior Member

Ciao, ho già fatto tutte le ricerche sugli altri tread prima di aprirne un altro, ma proprio non ho trovato nulla di compatibile con il winform.

sto cercando di aprire delle cartelle che si trovano su una cartella fuori dal dominio, naturalmente ho l'user e la password ed ho pensato di utilizzare l'impersonalizzazione di windows

allego la classe che utilizzo :

using System;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Security.Principal;


namespace PreparaMpsRoma
{
public class ImpersonateUser
{
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(
String lpszUsername,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private extern static bool CloseHandle(IntPtr handle);
private static IntPtr tokenHandle = new IntPtr(0);
private static WindowsImpersonationContext impersonatedUser;

[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]

public void Impersonate(string domainName, string userName, string password)
{

try
{
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;

tokenHandle = IntPtr.Zero;
bool returnValue = LogonUser(userName,domainName,password,
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,

ref tokenHandle); // tokenHandle - new security token

if (false == returnValue)
{

int ret = Marshal.GetLastWin32Error();
Console.WriteLine("LogonUser call failed with error code : " +

ret);
throw new System.ComponentModel.Win32Exception(ret);

}

// Step - 2
WindowsIdentity newId = new WindowsIdentity(tokenHandle);

// Step -3
impersonatedUser = newId.Impersonate();
}

catch (Exception ex)
{
Console.WriteLine("Exception occurred. " + ex.Message);
}

}

}

quello che non capisco e che quando inserisco user : miautenza, password : miapsw, domainName : \\168.96.200.78\myfolder , mi rimanda sempre l'errore : "Errore durante l'accesso: nome utente sconosciuto o password non valida"

cosa sbaglio??

Grazie
Fabio

0v3rCl0ck Profilo | Guru

>Ciao,

Ciao

>ho già fatto tutte le ricerche sugli altri tread prima
>di aprirne un altro, ma proprio non ho trovato nulla di compatibile
>con il winform.
>
>sto cercando di aprire delle cartelle che si trovano su una cartella
>fuori dal dominio, naturalmente ho l'user e la password ed ho
>pensato di utilizzare l'impersonalizzazione di windows
>

Pensato ad utilizzare l'impersonating integrata in asp.net?

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx
http://blogs.ugidotnet.org/jc/archive/2005/09/26/27072.aspx

In questo modo potresti configurarti un utente di domino con cui le richieste vengono esaudite. Poi all'utente di dominio potrai configurare tutte le policy del caso: dove può andare, con che diritti, ecc...

Oppure per farlo a livello di programmazione (come hai provato a fare tu), prova a seguire questa documentazione MS:

http://support.microsoft.com/?scid=kb%3Ben-us%3B306158&x=7&y=8


-------------------------------------------------------------------
Michael Denny
Senior Software Developer
Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

kintaro Profilo | Junior Member

Dai miei studi in merito ho capito che l'impersonate e gli esempi che mi hai postato sono solo per i client dello stesso dominio.

mi sono anche scaricato da MS tutta una suite di esempi in merito!!

ho testato anche la mia classe con un utenza dello stesso dominio e funziona ma nel mio caso no, (non so se è qst il vero motivo ma non trovo altre spiegazioni), l'indirizzo a cui io mi vado a loggare è un indirizzo pubblico fuori dal mio dominio.

Sempre indagando credo che la soluzione sia nell'assembly [System.Net] ma ancora non ho indagato approfinditamente per portare avanti altri lavori, ma di certo questo non lo reputo terminato!!
oggi ho consegnato l'applicazione (vers. 0.9) con un accrocco: in fase di installazione parte un comando BAT che installa l'unità di rete (net use), da qui poi funziona tutto, essendo un server non viene mai ravviato, salvo imprevisti, e cmq l'installazione dell'unità si rinstalla al ravvio, la soluzione non mi piace perchè sono dati confidenziali quindi dovremmo essere un numero chiuso ad avere le credenziali per l'accesso, invece cosi...

Grazie dell'aiuto!
Fabio

0v3rCl0ck Profilo | Guru

>Dai miei studi in merito ho capito che l'impersonate e gli esempi
>che mi hai postato sono solo per i client dello stesso dominio.

Sinceramente non ho mai provato accedendo ad un dominio diverso da quello del server, ma mi sembra strano non vada. Tutti gli articoli che ti ho mandato prevedono di specificare il dominio per il login, strano che non vadano.

>
>mi sono anche scaricato da MS tutta una suite di esempi in merito!!
>
>ho testato anche la mia classe con un utenza dello stesso dominio
>e funziona ma nel mio caso no, (non so se è qst il vero motivo
>ma non trovo altre spiegazioni), l'indirizzo a cui io mi vado
>a loggare è un indirizzo pubblico fuori dal mio dominio.
>
>Sempre indagando credo che la soluzione sia nell'assembly [System.Net]
>ma ancora non ho indagato approfinditamente per portare avanti
>altri lavori, ma di certo questo non lo reputo terminato!!
>oggi ho consegnato l'applicazione (vers. 0.9) con un accrocco:
>in fase di installazione parte un comando BAT che installa l'unità
>di rete (net use), da qui poi funziona tutto, essendo un server
>non viene mai ravviato, salvo imprevisti, e cmq l'installazione
>dell'unità si rinstalla al ravvio, la soluzione non mi piace
>perchè sono dati confidenziali quindi dovremmo essere un numero
>chiuso ad avere le credenziali per l'accesso, invece cosi...

Se riesco a provare la cosa, poi ti faccio sapere...

-------------------------------------------------------------------
Michael Denny
Senior Software Developer
Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5