2010-09-16 5 views
0

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é.

?

Répondre

0

L'identité en cours d'exécution de NUnit est vous, alors que l'identité courante de MVC est probablement IUSR _... Je pense que c'est juste un problème de sécurité.

+0

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

Questions connexes