Accesso risorse di rete tramite rappresentazione

martedì 20 luglio 2004 - 20.44

cnnmax Profilo | Junior Member

Ciao a tutti.
Devo accedere a una risorsa di rete da una pagina ASP per fare upload e download di files.
Come sappiamo il processo ASP gira con l'utente ASPNET che non ha permessi sulle cartelle di rete e non posso dargliene e non posso cambiare l'utente nel file machine.config.
Ho però bisogno di accedere alle risorse di rete in base all'utente che si collega al sito.
Premetto che gli utenti sono utenti del dominio anche se non effettuano il logon.
Ho letto che è possibile usare la "rappresentazione" in modo da cambiare temporaneamente l'utente "ASPNET" impostando "identity impersonate="true"" nel file web.config e usando le API LogonUser e la classe WindowsIdentity.
Solo che mi da il seguente errore :

Errore di rappresentazione.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.
Dettagli eccezione: System.Web.HttpException: Errore di rappresentazione.
Errore nel codice sorgente:
Analisi dello stack:

[HttpException (0x80004005): Errore di rappresentazione.]
System.Web.ImpersonationSuspendContext.GetCurrentToken() +215
System.Web.ImpersonationSuspendContext.Suspend() +53
System.Web.HttpContext.GetConfig(String name) +104
System.Web.Configuration.HttpCapabilitiesBase.GetConfigCapabilities(String configKey, HttpRequest request)
System.Web.HttpRequest.get_Browser()
System.Web.UI.Page.CreateHtmlTextWriterInternal(TextWriter tw, HttpRequest request)
System.Web.UI.Page.CreateHtmlTextWriter(TextWriter tw)
System.Web.UI.Page.ProcessRequestMain()

se invece elimino la riga dal web.config va avanti ma mi da comunque accesso negato.

Grazie a tutti

Brainkiller Profilo | Guru

Scusa una cosa.... sono un po' tonto...
Ma rappresentazione sarebbe la traduzione in italiano di impersonation per caso ?
Se così fosse ... c'è da ridere LOL ...

Cmq. ho provato tempo fa l'impersonation per un certo periodo, generalmetne è sufficiente questa stringa nel web.config:
<identity impersonate="true" userName="contoso\Jane" password="pass"/>

dove contoso è il dominio, Jane l'utente e poi c'è la password.

ciao
david

cnnmax Profilo | Junior Member

Ora provo come mi hai detto.
Solo che ho bisogno di avere accesso diverso in base agli utenti di windows che non si loggano al sistema ma fanno parte del dominio. Quindi l'idea era quella di impersonare l'utente quando deve fare operazioni su share di rete.
Come mi suggerisci tu l'utente è sempre lo stesso.

Grazie

cnnmax Profilo | Junior Member

Non hai qualche sito di riferimento dove posso trovare un po di documentazione?
Tutte le ricerche che faccio mi riportano cmq ad usare impersonate, infatti funziona, o meglio mi cambia identità ma quando tento di fare l'upload al server con la nuova identità mi da accesso negato.
Per l'upload uso: postedFile.SaveAs(filename)

grazie

Brainkiller Profilo | Guru

Comincia a guardare nel .NET Framework SDK.
Cerca la classe NetworkCredential troverai vari esempi.

ciao
david

cnnmax Profilo | Junior Member

Niente da fare. Non riesco ad accedere in rete.

Ho visto NetworkCredential e fa una cosa del genere:

Dim MyURI As String = "\\Server\nomecondivisione"
Dim WReq As WebRequest = WebRequest.Create(MyURI)
WReq.Credentials = _
New NetworkCredential("username", "password")
ma non mi da accesso.

Riprovando con Impersonate, se scrivo l'utente nel file web.config :
<identity impersonate="true" userName="server\username" password="password" /> funziona, ma non è la soluzione che cerco.

facendo invece :

(1)
Dim impersonatedUser As WindowsImpersonationContext
If LogonUser("username", _
"domainname", _
"password", _
LOGON32_LOGON_NETWORK, _
LOGON32_PROVIDER_DEFAULT, token) = True Then

impersonatedUser As WindowsImpersonationContext = WindowsIdentity.Impersonate(CType(Session("ptrtoken"), IntPtr))

end if

se vado a testare WindowsIdentity.GetCurrent.Name prima e dopo trovo : prima: nomemacchina\IUSR_nomemacchina
dopo: domainname\username
quindi sembra che funzioni solo che appena faccio :

postedFile.SaveAs(filename)

mi compare la maschera di accesso al server e con qualunque utente provo ad accedere mi da accesso negato.

non so più cosa provare :-(

Non è che sbaglio sulle impostazioni dei permessi?
Ho il sito su una macchina XpPro e la cartella condivisa su un controllore di dominio windows2000 e l'utente che deve avere accesso alla share ha tutti i permessi.

Se la prova la faccio con l'utente loggato al sistema funziona tutto ma non è il mio caso.

un'altra conferma che impersonate funziona è che facendo le prove loggandomi al sistema e facendo come in (1) mi ricompare la maschera di accesso alla risorsa.

HELP.....



cnnmax Profilo | Junior Member

Ci sono riuscito.

Si sembra che funzioni. Ora sto risolvendo un altro paio di problemi e se ci riesco provo a scrivere un articolo riguardante l'esperienza fatta con la sicurezza, così partecipo anche al concorso

Cmq alla fine ho usato Impersonate.

grazie a tutti

Brainkiller Profilo | Guru

Ah ecco... nel leggere il messaggio... stavo aspettando che dicessi come l'avevi risolta LOL.
Beh bene sono contento.

ok!
ciao
david
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5