Har problem då jag listar filer på utdelad mapp. Jag svar mig själv. Antagligen är det den trötta hjärnan som ställer till det igen då jag inte har samma rättigheter på den andra servern och därför får jag där access denied. Du måste lägga upp samma user o pw på den nya servern. Ok, jag vet inte om jag fattar riktigt?? Antagligen är problemet att användarna ändå kommer in i din appl som anonymous. Har testat detta får samma fel: Glöm inte att Machine.config också måste ha satt impersonate för att web.config:s impersonate ska ha någon funktion alls (iaf. vad jag fått fram efter lite tester å sökning) Det gav samma resultat.Access to the path "\\serv01\gemensam" is denied. Hittade lite kod som jag har testat fram och tillbaka, och nu tror jag att det fungerar...Hjälp med Impersonate
Använder Windows Authentication och kör IIS lokalt på min burk och <identity impersonate="true" /> i webconfig.
Då jag anger en server och en utdelad resurs på en annan dator, typ : \\111.111.111.111\mappen funkar allt bra.
Men om jag lägger mitt webbprojekt på en annan webbserver i samma domän och kör på denna, delar ut en mapp på min egna burk med samma rättigheter så funkar det inte. Access to the path xxxx denied.
Är det någon som vet vad jag gör för fel!Sv: Hjälp med Impersonate
Sv: Hjälp med Impersonate
Glöm inte att sätta att det är den usern som skall impersoneras.
Desssutom måste usern vara behörig till din virtual dir samt
Temporary ASP.NET Files som du hittar under Windowskatalogen.Sv:Hjälp med Impersonate
Men tanken är att via ett intranäts admin verktyg ska en administratör kunna ange en sökväg till en utdelad mapp inom domänen. Användarna ska då via intranätet kunna surfa via browsern till denna adress och då kommat åt resursens innehåll.
Om den utdelade mappen har rättigheter som låter användarna i domänen läsa filer bör väl detta fungera då Windows Auth. och Impersonation används.
Måste jag även sätta rättigheter Temporary ASP.NET mappen?Sv: Hjälp med Impersonate
Det kan du styra så här
<authorization>
<allow roles="MinGrupp" />
<deny users="?" /> <!-- no anonymous -->
MinGrupp- måste nu vara behörig till wwwroot\DinApplAnvändarna ska finnas med i MinGrupp.
(MinGrupp kan vara hela domänen så här: FORETAGET\Domain Users)
samt de ska vara behöriga till <Temporary ASP.NET Files>, i %windir%\Microsoft.NET\v...Funkar i en och samma domän.
Du kan nu nå anv. namnen i koden t ex så här:
Trace.Write(" -- User.Identity -- " & User.Identity.AuthenticationType & " " & User.Identity.Name)
Obs: för att Trace ska funka ska du skriva så här i web.config:
<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime" localOnly="false" />
OlaSv:Hjälp med Impersonate
Access to the path "\\serv01\gemensam" is denied.
Har kört trace och kollat så att jag verkligen kör rätt användare.
Denna användaren finns med i Domain Users.
När jag kör min lokla iis på min burk (winXP) funkar det fint.
Men på server w2000 fungerar det ej.Sv: Hjälp med Impersonate
Sv: Hjälp med Impersonate
Sv:Hjälp med Impersonate
Satte impersonate true i webconfig, behöve ej ända i machine.config.
Använder Windows Authentication, ej anonymous.
Och använder klassen nedan för att kunna använda impersonate.
public class ImpersonateUser
{
public const int LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool RevertToSelf();
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);
public bool ImpersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if(RevertToSelf())
{
if(LogonUserA(userName, domain, password,LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if(token!= IntPtr.Zero)
CloseHandle(token);
if(tokenDuplicate!=IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}
public void undoImpersonation()
{
impersonationContext.Undo();
}
}