Les exceptions à la sécurité dans ASP.NET et de Charger le Profil Utilisateur de l'option dans IIS 7.5
Après le déploiement de la nouvelle version de notre ASP.NET 2.0 application, il a commencé à élever le niveau de sécurité d'exception: "le Système de.De sécurité.SecurityException: Demande d'autorisation de type 'System.Web.AspNetHostingPermission, Système, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 " a échoué.“.
Après une recherche rapide sur internet, nous avons pu résoudre ce isse en mettant l'option "Charger le Profil Utilisateur" à Vrai dans les pools d'applications IIS 7.5. Cette solution est également mentionné à plusieurs reprises ici sur stackoverflow:
- Étrange ASP.NET erreur !
- Système.Web.AspNetHostingPermission Exception sur le Déploiement de Nouveaux
- L'exécution d'un asp.net projet d'application web sur IIS7 throws exception
Mais nous avons été incapables de trouver la raison pourquoi il doit être vrai. Nous avons passé en revue tous les changements dans la nouvelle version (avec plaisir il n'y avait que quelques-uns), mais n'a rien trouvé de suspect (pas d'accès à un registre ou des temp de données que certains articles proposés, etc). Quelqu'un pourrait-il nous donner des indices sur un ASP.NET application hébergée dans IIS 7.5 besoins "de Charger le Profil Utilisateur" option est définie à True?
Détails:
- Application de la piscine: .NET 2.0; Mode Pipeline Géré - Classique; l'Identité de compte de domaine personnalisé
- Dans IIS 6.0 (W2K3): Ancienne et nouvelle
version de travail d'application de l'amende - Dans IIS 7.5 (W2K8 R2): Ancienne version de
l'application fonctionne très bien; nouvelle version
de la demande soulève des questions de sécurité
exception–, il commence à travailler après
le réglage "de Charger le Profil Utilisateur" à Vrai
Merci!
EDIT:
Nous avons enfin trouvé la cause de ce problème! Notre admin utilisé différentes techniques pour copier la nouvelle version de l'application à partir de l'environnement de test à l'environnement de production. Il a utilisé le serveur web en tant qu'intermédiaire. Après donwloading zippée communiqué de construire des artefacts à l'environnement de production, puis de décompresser les fichiers, ils étaient encore marqués comme "bloqué" parce qu'ils sont venus de différentes ordinateur. Voir aussi https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a. ASP.NET alors, logiquement, exécute ces binaires en confiance partielle au lieu de la pleine confiance et qui a été fait à l'origine de sécurité mentionnés exceptions dans notre application.
Réglage "de Charger le Profil Utilisateur" True fixe les exceptions de sécurité comme un effet secondaire. Si "de Charger le Profil Utilisateur" est défini à False, alors notre application (pas notre code, peut-être certains .NET BCL externe ou de l'assemblée) est d'essayer de requête d'informations de base sur le répertoire "C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files" où l'identité de pool d'applications n'est pas autorisé à:
- Avec une pleine confiance: accès refusé à cette requête, l'opération ne soulève pas toute exception
- Avec confiance partielle: accès refusé pour cette opération de requête soulève l'exception de sécurité
Si "de Charger le Profil Utilisateur" est défini à True, alors profil temporaire dans le répertoire d'utilisateur est créé à chaque fois de l'application de la piscine commence. Notre application est alors d'essayer de requête d'info sur "Fichiers Internet Temporaires" répertoire de ce profil, qui l'identité de pool d'applications est autorisé à le faire. Ainsi, aucune exception n'est levée, même avec une confiance partielle.
Vraiment sympa la session de dépannage! 🙂
- Merci pour le travail d'enquête, Peter, j'ai eu le même problème et le flux d'utilité (qui figurent dans le superuser.com question) était de savoir comment j'ai débloqué tous les fichiers dans mon répertoire webapp. Et maintenant, je peux éteindre la Charge de l'Utilisateur option de Profil!
- Totalement excellent, nous avons juste rencontré ce problème et je ne pouvais pas expliquer correctement il.
- ci-dessous la réponse a l'explication détaillée, stackoverflow.com/questions/17149132/...
Vous devez vous connecter pour publier un commentaire.
Un exemple de plus quand "de Charger le Profil Utilisateur" paramètre pourrait aide vous est l'utilisation de fichiers temporaires. Parfois, cette usege peut être indirecte. SQL Express, par exemple, peut le faire dans certaines situations.
Donc mon conseil. Switch off "de Charger le Profil Utilisateur" et d'examiner %TEMP%. Ensuite, essayez de donner un compte de domaine utilisé pour l'application de la piscine l'accès complet (ou de modifier les droits d'accès) pour le répertoire %TEMP%. Probablement résoudre votre problème.
Un plus de conseils d'utilisation du Moniteur de Processus (voir http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) les paramètres régionaux parties de profil d'utilisateur sera utilisé (ou de recevoir de l'erreur "accès refusé") au moment où vous recevez "du Système.De sécurité.SecurityException: Demande d'autorisation de type 'System.Web.AspNetHostingPermission" l'exception".
LoadUserProfile=true
dans IIS et modifier la valeur par défaut temp dossier %TEMP% deC:\Users\C:\Users\AccountName\AppData\Local\Temp
à quelque part d'autre?%USERPROFILE%\AppData\Local\Temp
. Il devrait fonctionner.%USERPROFILE%\AppData\Local\Temp
est stocké dans IIS? Ou est-il quelque part dans le registre? J'ai le LoadUserProfile true déjà, mais souhaitez changer mon emplacement du dossier temp%USERPROFILE%\AppData\Local\Temp
seront stockés pas dans IIS. Il sera stocké dans la base de registre (HKEY_CURRENT_USER\Environment
) du compte de l'utilisateur. Il existe dans le profil de l'utilisateur, que vous pouvez utiliser pour le pool d'applications. Le plus facile moyen de modifier la valeur de registre est en cours de chargement de manière interactive en tant qu'utilisateur et de changer de TEMP dans le contexte de l'utilisateur (ou de changer de registre après l'ouverture de session en tant qu'utilisateur).J'ai aussi couru dans le même problème et pourrait résoudre le problème en définissant de charger le profil utilisateur=true. Toutefois, j'ai repris les charger le profil utilisateur = false et au redémarrage de l'application de la piscine, mais maintenant je n'obtiens aucune exception.
Je suis passé par tous les relavents postes sur stackoverflow et aussi sur Asp.net et iis pages du forum.
Un autre domaine où LoadUserProfile pourrait aider est lors de la configuration de confiance MSMQ de liaison dans WCF. Si le pool d'applications s'exécute sous un compte approuvé, ce ne sont pas charger le SID, à moins que le pool d'Applications de charger le profil utilisateur paramètre est défini sur true, et donc l'authentification échoue.