Toon posts:

[ASP] Even wat ASP kennis nodig.. (Impersonate)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een component die ervoor kan zorgen dat met het asp script ingelogt kan worden als een andere user.

HOWTO: Impersonate a User from Active Server Pages

Dit doe ik met het volgende script
code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
     Option Explicit
     Dim objLogon

     Set objLogon = Server.CreateObject("LoginAdmin.ImpersonateUser")
     objLogon.Logon "Username", "password", "Domain"

      Response.redirect "http://Server/Share/file.exe"

     objLogon.Logoff
     Set objLogon = Nothing
   %>

Ik probeer dan met die user de file.exe te donwloaden. Deze is met de anonymous user niet te downloaden maar alleen met de user die ik opgegeven heb. Dit gaat dus met windows authenticatie.

Alleen als die redirect gebeurt krijg ik toch een login scherm. Hij heeft dus de logoff naar alle waarschijnlijkheid al gedaan.

Nu wil ik weten of er een andere manier is om een file aan te bieden via dat script zodat hij nog ingelogt blijft.

Of wie heeft hier wat meer informatie over.

Verwijderd

Dit is iig niet de goede manier. Alle commando's na de redirect worden niet uitgevoerd, wat inhoudt dat

- De user niet wordt uitgelogd met als gevolg mogelijke problemen bij opnieuw inloggen
- Het Object niet wordt verwijderd uit het geheugen, waardoor je server resources ophoopt.

Wat je volgens mij het beste kunt doen, is een combinatie gebruiken van serverside VBScript en clientside Javascript om vervolgens de, te downloaden file in een nieuw scherm te openen, zodat daarna ook nog code kan worden uitgevoerd.

Zoals als dit zou goed moeten werken:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@LANGUAGE=VBSCRIPT%>
<%Option Explicit%>
<HTML>
    <HEAD>
       <SCRIPT LANGUAGE=Javascript>
           function DownloadFile(){
               window.open('http://server/share/file.exe', '');
               document.location.href='DeleteObject.asp';
           }
       </SCRIPT>
    </HEAD>
    <BODY OnLoad="Javascript: DownloadFile();">
         <%Dim ObjLogon
               Set ObjLogon = Server.CreateObject("LoginAdmin.ImpersonateUser")
               ObjLogon.Logon "UserName", "PassWord", "Domain"%>
    </BODY>
</HTML>


Dan moet je dus alleen nog ff een "DeleteObject.asp" aanmaken waarin je het object weer NOTHING maakt. Niet vergeten om dan deze file wel te includen, anders kent-ie het object niet...

Volgens mij zou dat wel moeten werken...

Verwijderd

Topicstarter
bedoel je dat ik in DeleteObject.asp een include moet doen naar het asp script met bovenstaande inhoud?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Het probleem van een redirect is dat je eigenlijk gewoon weer een rechtstreekse request doet naar de file. En bij het opvragen van de file zal de server niet meer weten dat je bij de vorige request ingelogd was als een andere user (http = stateless).
Feitelijk bereik je met je huidige code hetzelfde effect als wanneer je het bestand gewoon rechtstreeks aanroept vanuit de browser.

Is er dan een oplossing? Natuurlijk, en die gaat ongeveer zo:

1 inloggen met LoginAdmin object
2 file inlezen met ADODB.Stream object (meer info bijv hier)
3 uitloggen
4 juiste headers zetten (content-disposition, mimetype)
5 file doorsturen naar client (response.binarywrite)

Today's subliminal thought is:


Verwijderd

Topicstarter
Dit is een oplossing die ik al heb en op dit moment ook gebruik.

Wij hebben op onze website ook bestanden van ongeveer 190 mb (meeste zijn 20mb).

Als iemand via bovenstaande manier de file probeert te krijgen laat hij zich zoals ik zie eerst in het gegeugen van de webserver.
Dit werkt prima bij kleine files alleen met grote files is dit bijna onwerkbaar (7-10 min voordat download schermpje komt).

Misschien heb je hier een andere oplossing voor

Is het dus niet mogelijk om via impersonate een file te donwloaden zonder hem te streamen??

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Is het niet mogelijk om de files in brokken in te lezen en door te sturen waarbij je om de x bytes een flush doet? Geen idee of dat werkt (heb geen praktijk ervaring met bestanden van die omvang), maar misschien iets wat je snel kan testen.

Today's subliminal thought is:


Verwijderd

Topicstarter
Heb jij nog een idee waarop ik met google zou moeten zoeken voor wat meer informatie...

Ik kan er niet echt veel over vinden.. (Het helpt altijd als iemand anders een andere zoek query heeft :) )
Pagina: 1