2010-06-18 3 views
18

Après le déploiement de la nouvelle version de notre application ASP.NET 2.0, il a commencé à lever une exception de sécurité: "System.Security.SecurityException: Demande d'autorisation de type 'System.Web.AspNetHostingPermission, System, Version = 2.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089' a échoué. ". Après une recherche rapide sur internet, nous avons pu résoudre ce problème en réglant "Load User Profile" sur True dans le pool d'applications IIS 7.5. Cette solution est également mentionné à plusieurs reprises ici sur stackoverflow:Exceptions de sécurité dans les options ASP.NET et Load User Profile dans IIS 7.5

Cependant, nous avons pu trouver des raisons pour lesquelles il doit être vrai. Nous avons passé en revue tous les changements dans la nouvelle version (heureusement il n'y en avait que quelques-uns), mais n'avons rien trouvé de suspect (pas d'accès au registre ou aux données temporaires comme certains articles le suggéraient). Est-ce que quelqu'un pourrait nous donner des indications quand une application ASP.NET hébergée dans IIS 7.5 a besoin de l'option "Load User Profile" définie sur True?

Détails:

  • pool d'applications: .NET 2.0; Mode Pipeline géré - Classique; Identité - compte de domaine personnalisé
  • Dans IIS 6.0 (W2K3): Ancien et nouveau version de travail d'application bien
  • Dans IIS 7.5 (W2K8-R2): Ancienne version d'application fonctionne très bien; nouvelle version d'application soulève la sécurité exception - il commence à travailler après réglage « Charger le profil de l'utilisateur » True

Merci!

EDIT: Nous avons finalement trouvé la cause de ce problème! Notre administrateur a utilisé une technique différente pour copier la nouvelle version de l'application depuis l'environnement de transfert vers l'environnement de production. Il a utilisé le serveur web comme intermédiaire. Après avoir téléchargé des artefacts de génération de versions compressées vers l'environnement de production et ensuite décompressé les fichiers, ils étaient toujours marqués comme "bloqués" parce qu'ils provenaient d'un ordinateur différent. Voir aussi https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a. ASP.NET exécute ensuite logiquement ces binaires en confiance partielle au lieu de l'approbation totale et qui provoquait réellement les exceptions de sécurité mentionnées dans notre application.

La définition de «Load User Profile» sur True a corrigé les exceptions de sécurité en tant qu'effets secondaires. Si "Load User Profile" est défini sur False, alors notre application (pas notre code, peut-être un peu.NET BCL ou assembly externe) tente d'interroger des informations de base sur le répertoire "C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files" dont l'identité du pool d'applications n'est pas autorisée:

  • Avec pleine confiance: accès refusé à cette opération de requête ne soulève pas d'exception
  • Avec confiance partielle: refuser l'accès à cette opération de requête soulève exception de sécurité

Si « Load profil utilisateur » est défini sur True, le profil temporaire du répertoire Utilisateurs est créé chaque fois que le pool d'applications démarre. Notre application essaie alors d'interroger des informations sur le répertoire "Temporary Internet Files" de ce profil, auquel l'identité du pool d'applications est autorisée. Aucune exception n'est donc levée même avec une confiance partielle.

Très bonne session de dépannage! :)

+0

Merci pour le travail d'enquête Peter, j'ai eu le même problème et l'utilitaire de flux (répertorié dans la question superuser.com) était comment j'ai débloqué tous les fichiers dans le répertoire de mon webapp. Et maintenant je peux désactiver l'option Load User Profile! –

+1

Totalement excellent, nous avons juste rencontré ce problème et n'avons pas pu l'expliquer correctement. –

+0

ci-dessous réponse a l'explication détaillée http://stackoverflow.com/questions/17149132/what-exactly-happens-when-i-set-loaduserprofile-of-iis-pool –

Répondre

7

Un autre exemple lorsque le paramètre «Charger le profil utilisateur» peut vous aider à utiliser des fichiers temporaires. Parfois, cette utilisation peut être indirecte. SQL Express par exemple peut le faire dans certaines situations.

Donc, mon conseil. Désactivez "Load User Profile" et examinez% TEMP%. Ensuite, essayez de donner au compte de domaine utilisé pour le pool d'applications l'accès complet (ou modifier l'accès) au répertoire à partir de% TEMP%. Probablement que ça répare ton problème. Un autre conseil est l'utilisation de Process Monitor (voir http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) pour les paramètres régionaux quelles parties du profil utilisateur seront utilisées (ou recevoir l'erreur "accès refusé") au moment où vous recevez "System.Security.SecurityException: Request for l'autorisation de type "System.Web.AspNetHostingPermission" exception.

+1

Merci pour vos conseils. Cela nous a aidés à résoudre le problème. L'identité du pool d'applications nécessite un accès en lecture au répertoire "C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Fichiers Internet temporaires". L'application ne demande que des informations de base pour ce répertoire et c'est tout. Probablement il est causé par un des assemblages externes que nous utilisons (nous suspectons iTextSharp). Quoi qu'il en soit, vos conseils nous ont aidés à expliquer la situation, alors merci encore. – Peter

+0

Bienvenue à Peter! – Oleg

+0

Est-il possible de définir LoadUserProfile = true dans IIS et de changer l'emplacement% TEMP% du dossier temporaire par défaut de C: \ Users \ C: \ Utilisateurs \ AccountName \ AppData \ Local \ Temp à un autre emplacement? –

0

Un autre domaine dans lequel LoadUserProfile peut aider est lors de la configuration d'une liaison MSMQ approuvée dans WCF. Si le pool d'applications s'exécute sous un compte approuvé, le SID ne sera pas chargé, à moins que le paramètre de profil utilisateur de chargement du pool d'applications ne soit défini sur true et que l'authentification échoue.

1

J'ai également rencontré le même problème et j'ai pu résoudre le problème en définissant load user profile = true. Cependant j'ai retourné le profil d'utilisateur de chargement = faux et ai redémarré le pool d'application mais maintenant je n'obtiens aucune exception. J'ai parcouru tous les messages relavents sur stackoverflow et aussi sur les pages forum Asp.net et iis.

Questions connexes