Hej, Åkej, nu har jag förstått. Impersonate user from ASP
Jag håller på kikar på hur man själv virtuellt kan logga på som en annan användare än IUSR_XXXXX. Jag kör anonymous på IIS:en och vill forsätta göra så.
Det klassiska exemplet torde ju vara när man gör en fileupload och man inte vill ge IUSR_XXXX rättigheter till en godtycklig upload katalog. Då skapar man ju istället en användare som bara har rättigheter till denna katalog.
Jag hittade ett exempel på hur man kan göra en "impersonate" i MSDN. Detta genom att skapa en DLL i vilken jag ropar på lite smått och gott i win-api:t.
Mitt problem är att denna 'impersonering' aldrig slår igenom. Jag får alltid ett false tillbaka när jag försöker köra en logonUser. Och följaktligen ett permission denied när jag skriver till katalogen.
Vad kör jag som då egentligen, jag antar att DLL:en kör som IWAM_XXXXX är det så? Och att jag då försöker skriva i katalogen som IUSR_XXXXX?
I förlängningen om jag lyckas logga på vederbörande. Vad behöver jag sätta för rättigheter på katalogen, det borde väl räcka med min virtuelle användare?
Tacksam för kloka tankar om vad jag kan göra för fel.
Kodklipp:
ASP:
<code>
DIM objLogon
Set objLogon = Server.CreateObject("Manager.clsImpersonateUser")
if isobject(objLogon) then
Response.Write "result: " &objLogon.Logon("uploaduser", "upload", "domän") &"<BR>"
call objLogon.Logoff
Set objLogon = Nothing
end if
</code>
VB - BAS
<code>
Public Declare Function LogonUser Lib "advapi32.dll" _
Alias "LogonUserA" (ByVal lpszUsername As String, _
ByVal lpszDomain As String, ByVal lpszPassword As String, _
ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, _
phToken As Long) As Long
Public Declare Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
Public Declare Function RevertToSelf Lib "advapi32.dll" () As Long
</code>
VB - CLS
<code>
Private Const LOGON32_LOGON_INTERACTIVE = 2
Private Const LOGON32_PROVIDER_DEFAULT = 0
Public Function Logon(ByVal strAdminUser As String, _
ByVal strAdminPassword As String, _
ByVal strAdminDomain As String) As Variant
Dim lngTokenHandle, lngLogonType, lngLogonProvider As Long
Dim blnResult As Boolean
lngLogonType = LOGON32_LOGON_INTERACTIVE
lngLogonProvider = LOGON32_PROVIDER_DEFAULT
blnResult = RevertToSelf()
blnResult = LogonUser(strAdminUser, strAdminDomain, strAdminPassword, _
lngLogonType, lngLogonProvider, _
lngTokenHandle)
blnResult = ImpersonateLoggedOnUser(lngTokenHandle)
Logon = blnResult
End Function
Public Sub Logoff()
Dim blnResult As Boolean
blnResult = RevertToSelf()
End Sub
</code>Sv: Impersonate user from ASP
För att du skall kunna köra DLL:en krävs det att du har lagt upp IWAM_XXXX som "Act as operating system", om du även vill kunna debugga måste du lägga upp dig själv som "act as operating system". Väldigt intressant, nu har jag gjort en primitiv logonuser class, en enkel filuppladdningsklass och det fungerar skitbra. Nu måste jag bara kapsla in FSO så blir det suveränt!