Vous voyez deux choses, qui sont souvent confondues dans ASP.NET:
- "identité d'utilisateur" - L'authentification d'un compte d'utilisateur n'a rien à voir avec le compte ou l'identité qui s'exécute réellement sous les II et ASP.NET. L'authentification anonyme permet à tout utilisateur d'accéder à tout contenu public sans fournir de nom d'utilisateur et de mot de passe au navigateur client. Le compte IUSR anonyme qui est authentifié par défaut dans IIS applique simplement l'accès au contenu du site Web public. Il n'affecte pas les processus ou les ressources utilisés par les services II ou ASP.NET sous-jacents.
- "identité d'application" - Il s'agit du compte "WindowsIdentity" réel sur le serveur qui s'exécute réellement derrière IIS et ASP.NET, qui est le compte d'identité du pool d'applications attribué au pool par les II et attribué à ASP.NET. Votre processus ASP.NET s'exécute par défaut sous ce compte d'identité du pool d'applications (appelé compte virtuel dans IIs version 7.5+).
Explication: Tout d'abord, "l'authentification" dans ASP.NET n'est qu'un événement généralement configuré dans le web.config qui connecte un compte d'utilisateur donné qui est transmis en tant que jeton utilisateur par IIs à ASP.NET en tant qu'objet HttpContext ordinaire ... c'est-à-dire la session ou le contexte actuel de l'utilisateur actuel. Il ne modifie pas réellement WindowsIdentity qui exécute le processus ASP.NET, lui transmet simplement un jeton d'ID utilisateur. En utilisant HttpContext, votre code peut utiliser cet identifiant ou ce nom pour stocker les droits de base de données sur diverses sections de votre site Web. Mais cela n'affectera pas l'accès aux fichiers par ASP.NET car il n'affecte ni ne modifie l'identité du compte "processus" d'application réel qui exécute ASP.NET sous IIs.
Cela ne se produit que lorsque vous effectuez "Emprunt d'identité" qui indique à ASP.NET d'usurper l'identité du jeton qui lui est transmis par les II et de s'exécuter ensuite sous cet ID de compte. Vous pouvez définir l'emprunt d'identité dans votre web.config. Lorsque vous activez l'emprunt d'identité dans ASP.NET, WindowsIdentity change sur le processus de travail quel que soit le compte authentifié transmis à ASP.NET à partir d'IIS, et vous pouvez ensuite accéder aux fichiers, en fonction bien sûr des droits que vous attribuez à ce compte d'utilisateur. Il est important de noter que lorsque cela se produit, son ASP.NET temporaire peut revenir à son identité de processus par défaut, qui est dans les versions IIs actuelles, le compte d'identité du pool d'applications attribué à un pool d'applications donné.
Lorsque les II utilisent uniquement le compte d'utilisateur anonyme simple sans authentification explicite définie dans ASP.NET, les II démarrent par défaut le compte d'identité du pool d'applications du pool d'applications affecté au site Web et le transmettent à ASP.NET et au processus de travail qui l'exécute. Ce compte d'identité du pool d'applications traite toutes les demandes d'IIS et exécute ASP.NET pour ce site.
Lorsque IIs démarre sous cette configuration et est accessible par un utilisateur, il authentifie réellement en arrière-plan par défaut le compte IUSR anonyme qui détermine l'accès aux pages Web et autres ressources de base. Mais ce compte n'est PAS transmis à ASP.NET. Et cela n'affecte pas les exécutions d'IIS d'identité du pool d'applications et sous lesquelles ASP.NET s'exécute.
Si vous définissez Impersonate sur "true" dans, par exemple, votre web.config, ET que vous utilisez le compte IUSR anonyme par défaut dans IIs pour l'accès public, ET que vous définissez explicitement sur true la propriété anonymousAuthentication dans le web.config (au lieu d'utiliser Windows ou autre compte de connexion), les II jetteront l'identité du pool d'applications et les II et ASP.NET exécuteront désormais leurs processus d'application en tant que compte anonyme et authentifié IUSR.
Lorsque vous faites cela, ASP.NET et ses processus s'exécuteront désormais sous le compte IUSR .... c'est-à-dire que le processus des applications d'ASP.NET exécutera son compte WindowsIdentity en tant que compte IUSR. Vous pouvez maintenant appliquer un accès en lecture / écriture à ce compte IUSR anonyme et aux dossiers auxquels vous souhaitez que ce compte accède. (Remarque: assurez-vous toutefois d'ajouter le compte de processus par défaut, le compte Pool d'applications pour le pool, les droits également sur ces dossiers. Cela est conforme à la recommandation de Microsoft)
Bonne chance!