J'ai du code qui s'exécute dans une application asp.mvc dans IIS 7. Le code est censé enregistrer un fichier dans un partage UNC. Cette fonction est appelée à partir du code du contrôleur, avec le FilePathName = « \ MySrv \ sites \ docs \ 10080003 \ egg.txt »Essayer d'écrire un fichier sur UNC à partir d'ASP.NET MVC
public void EnsureDocument(string filePathName ,string content,WindowsIdentity identity)
{
System.Security.Principal.WindowsImpersonationContext impersonationContext = null;
try
{
impersonationContext = ((System.Security.Principal.WindowsIdentity)identity).Impersonate();
File.WriteAllText(filePathName, content);
}
finally
{
impersonationContext.Undo();
}
}
L'appel du contrôleur mvc asp.net ressemble à ceci ...
// pass running identity
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
//documentSvc.EnsureCaseDocument(filePathname,content,System.Security.Principal.WindowsIdentity)User.Identity);
l'appel d'un test NUnit ressemble à ceci ...
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
les symptômes sont que le code NUnit laisse tomber le fichier, mais l'appel de asp.net mvc ne laissez pas tomber le f ile.
** Test 1: PASSES, DROPS FILE ** Le code Nunit envoie via une identité {AuthType = Keberos, ImpersonationLevel = none, Name = "DOMAINE \ Fred Blogs"} et cela supprime le fichier sur le unc.
** Test 2: tombe en panne, NE PAS TOMBER LE FICHIER ** Avec impersonate = "true" dans le web.config, et faire l'appel
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
Le code asp.net mvc envoie à { AuthType = Keberos, ImpersonationLevel = Délégation, Name = "DOMAIN \ Fred Blogs"} et le fichier n'est pas supprimé.
** Test 3: ÉCHOUE, NE PAS TOMBER LE FICHIER ** Sans impersonate = "true" dans le web.config et d'appeler et de faire l'appel
documentSvc.EnsureCaseDocument(filePathname,content,System.Security.Principal.WindowsIdentity)User.Identity);
Le code asp.net mvc envoie par {AuthType = Négocier, ImpersonationLevel = Délégation, Nom = "DOMAIN \ Fred Blogs"} et le fichier n'est pas supprimé.
?
Oui, c'est un problème de sécurité; sur ma boîte de dev le code s'exécute comme IIS APPOOL \ ASP.NET 4.0 et sur la boîte de transit le code s'exécute en tant que SERVICE de RÉSEAU; Le but de l'impersonate = true dans le web.config et le code impersonationContext = ((System.Security.Principal.WindowsIdentity) identité) .Impersonate(); Le code consiste à exécuter le code en tant qu'utilisateur qui utilise le navigateur IE. à votre santé – user206890