Sie sehen zwei Dinge, die in ASP.NET häufig verwirrt sind:
- "Benutzeridentität" - Die Authentifizierung eines Benutzerkontos hat nichts mit dem Konto oder der Identität zu tun, die tatsächlich unter IIs und ASP.NET ausgeführt werden. Mit der anonymen Authentifizierung kann jeder Benutzer auf öffentliche Inhalte zugreifen, ohne den Client-Browser nach Benutzername und Kennwort zu fragen. Das anonyme IUSR-Konto, das standardmäßig in IIS authentifiziert wird, gilt nur für den Zugriff auf öffentliche Website-Inhalte. Dies hat keine Auswirkungen auf die Prozesse oder Ressourcen, die von den zugrunde liegenden IIs oder ASP.NET-Diensten verwendet werden.
- "Anwendungsidentität" - Dies ist das tatsächliche Konto "WindowsIdentity" auf dem Server, das tatsächlich hinter IIS und ASP.NET ausgeführt wird. Hierbei handelt es sich um das Konto "Anwendungspoolidentität", das dem Pool von IIs zugewiesen und ASP.NET zugewiesen wurde. Ihr ASP.NET-Prozess wird standardmäßig unter diesem Anwendungspoolidentitätskonto (in IIs Version 7.5+ als virtuelles Konto bezeichnet) ausgeführt.
Erläuterung: Erstens ist "Authentifizierung" in ASP.NET nur ein Ereignis, das normalerweise in der Datei "web.config" eingerichtet wird und ein bestimmtes Benutzerkonto anmeldet, das von IIs als einfaches HttpContext-Objekt an ASP.NET übergeben wird. dh die aktuelle Sitzung oder den Kontext des aktuellen Benutzers. Die WindowsIdentity, mit der der ASP.NET-Prozess ausgeführt wird, wird nicht geändert. Sie übergibt lediglich ein Benutzer-ID-Token. Mit HttpContext kann Ihr Code diese ID oder diesen Namen verwenden, um Datenbankrechte für verschiedene Bereiche Ihrer Website zu speichern. Der Dateizugriff durch ASP.NET wird dadurch jedoch nicht beeinträchtigt, da die Identität des tatsächlichen Anwendungskontos "process", mit dem ASP.NET unter II ausgeführt wird, nicht geändert wird.
Dies geschieht erst, wenn Sie "Identitätswechsel" ausführen, wodurch ASP.NET angewiesen wird, den Identitätswechsel für alle Token vorzunehmen, die IIs an das System übergeben, und diese dann unter dieser Konto-ID auszuführen. Sie können einen Identitätswechsel in Ihrer web.config festlegen. Wenn Sie den Identitätswechsel in ASP.NET aktivieren, ändert sich die WindowsIdentity auf dem Arbeitsprozess zu dem authentifizierten Konto, das von IIS an ASP.NET übergeben wird, und Sie können dann auf Dateien zugreifen, natürlich basierend auf den Rechten, die Sie diesem Benutzerkonto zuweisen. Es ist wichtig zu wissen, wann dies auftritt, und ASP.NET kann zu seiner Standardprozessidentität zurückkehren, die in den aktuellen II-Versionen wieder dem Anwendungspoolidentitätskonto entspricht, das einem bestimmten Anwendungspool zugewiesen ist.
Wenn IIs nur das anonyme Benutzerkonto ohne explizite Authentifizierung in ASP.NET verwendet, startet IIs standardmäßig das Anwendungspoolidentitätskonto des zugewiesenen Anwendungspools der Website und übergibt es an ASP.NET und den Worker-Prozess, der es ausführt. Dieses Anwendungspool-Identitätskonto verarbeitet alle Anforderungen für IIS und führt ASP.NET für diese Site aus.
Wenn IIs unter diesem Setup gestartet wird und ein Benutzer darauf zugreift, authentifiziert es tatsächlich standardmäßig das anonyme IUSR-Konto, das den Zugriff auf Webseiten und andere grundlegende Ressourcen bestimmt. Dieses Konto wird jedoch NICHT an ASP.NET übergeben. Dies hat keine Auswirkungen auf die Ausführung von Application Pool Identity IIS und die Ausführung von ASP.NET unter.
Wenn Sie "Impersonate" in Ihrer Datei "web.config" auf "true" setzen, UND Sie das standardmäßige anonyme IUSR-Konto in IIs für den öffentlichen Zugriff verwenden, UND Sie die Eigenschaft "anonymousAuthentication" in der Datei "web.config" explizit auf "true" setzen (anstatt Windows zu verwenden) oder ein anderes Anmeldekonto), IIs wirft die Identität des Anwendungspools heraus und IIs und ASP.NET führen ihre Anwendungsprozesse jetzt als anonymes IUSR-authentifiziertes und imitiertes Konto aus.
Wenn Sie dies tun, werden ASP.NET und seine Prozesse jetzt unter dem IUSR-Konto ausgeführt. Das heißt, der Anwendungsprozess von ASP.NET führt sein WindowsIdentity-Konto als IUSR-Konto aus. Sie können jetzt Lese- / Schreibzugriff auf dieses anonyme IUSR-Konto und auf die Ordner anwenden, auf die dieses Konto zugreifen soll. (Hinweis: Stellen Sie jedoch sicher, dass Sie das Standardprozesskonto, das Anwendungspoolkonto für den Pool und die Rechte für diese Ordner hinzufügen. Dies entspricht der Empfehlung von Microsoft.)
Viel Glück!