Impersonating in ASP Classic

29/05/2008 - 17:39 von Markus Broy | Report spam
Hallo zusammen,

ja ich weiß, das ist die NG für ASP .NET, aber hin und wieder muss man doch
noch an Kundenprojekte, die in ASP Classic laufen ...

Zum Problem: Ich muss in ASP innerhalb des Codes den User àndern. Hierzu
habe ich den folgenden Artikel gefunden:
http://support.microsoft.com/kb/248187/en-us

Die Methode Logon habe ich zu einer Funktion umgeschrieben, die mir
blnResult zurückgibt.

Nachdem ich die Dll in den Komponentendiensten registriert habe und auch die
lokalen Richtlinien für Benutzerrechte angepasst habe (hier muss der User,
in dessem Kontext das Impersonating erfolgt, das Recht "Einsetzen als Teil
des Betriebssystems" haben) làuft derAufruf der COM+ Komponente einwandfrei
und ich bekomme auch ein True (Impersonating hat stattgefunden) zurück. Wenn
ich allerdings dann per Request.Servervariables("AUTH_USER) oder aber
LOGON_USER abrufe, làuft die ASP-Seite nicht unter dem neuen User. Was làuft
schief? Kennt jemand eine Lösung?

Hier der Quellcode der ASP-Datei:

Dim oImpersonate
Set oImpersonate = Server.CreateObject("DWSImpersonating.ImpersonateUser")
Response.Write(oImpersonate.logon("MyUser","MyPassword","MyDomain")) 'gibt
True zurück

Response.Write("Nach dem Impersonating: " &
Request.ServerVariables("AUTH_USER"))


Und hier der Code der Dll:
Modul:


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

Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long)
As Long


Klasse:
Private Const LOGON32_LOGON_INTERACTIVE = 2
Private Const LOGON32_PROVIDER_DEFAULT = 0

Public Function Logon(ByVal User As String, ByVal Password As String, ByVal
Domain As String) As String

Dim lngTokenHandle, lngLogonType, lngLogonProvider As Long
Dim blnResult As Boolean

lngLogonType = LOGON32_LOGON_INTERACTIVE
lngLogonProvider = LOGON32_PROVIDER_DEFAULT

blnResult = RevertToSelf()

blnResult = LogonUser(User, Domain, Password, lngLogonType,
lngLogonProvider, lngTokenHandle)

blnResult = ImpersonateLoggedOnUser(lngTokenHandle)
CloseHandle (lngTokenHandle)

Logon = CStr(blnResult)

End Function

Public Sub Logoff()
Dim blnResult As Boolean

blnResult = RevertToSelf()
End Sub


Vielen Dank für die Unterstützung.

Gruß

Markus
 

Lesen sie die antworten

#1 Gerold Mittelstädt
29/05/2008 - 18:05 | Warnen spam
Hallo,

Markus Broy schrieb:
ja ich weiß, das ist die NG für ASP .NET, aber hin und wieder muss man doch
noch an Kundenprojekte, die in ASP Classic laufen ...



microsoft.public.de.inetserver.iis.asp

Viele Grüße!

Ähnliche fragen