Widzisz dwie rzeczy, które są często mylone w ASP.NET:
- „tożsamość użytkownika” - Uwierzytelnianie konta użytkownika nie ma nic wspólnego z kontem lub tożsamością, która faktycznie działa zarówno w IIS, jak i ASP.NET. Anonimowe uwierzytelnianie umożliwia każdemu użytkownikowi dostęp do dowolnej treści publicznej bez podawania nazwy użytkownika i hasła do przeglądarki klienta. Anonimowe konto IUSR, które jest domyślnie uwierzytelniane w IIS, po prostu stosuje dostęp do treści publicznej witryny. Nie wpływa na procesy ani zasoby używane przez bazowe usługi IIs lub usługi ASP.NET.
- „tożsamość aplikacji” - jest to rzeczywiste konto „WindowsIdentity” na serwerze, które faktycznie działa za IIS i ASP.NET, czyli kontem tożsamości puli aplikacji przypisanym do puli przez IIs i przekazanym ASP.NET. Twój proces ASP.NET domyślnie działa na tym koncie tożsamości puli aplikacji (zwanym kontem wirtualnym w IIs wersji 7.5+).
Objaśnienie: Po pierwsze, „uwierzytelnianie” w programie ASP.NET to po prostu zdarzenie zwykle konfigurowane w pliku web.config, które loguje dane konto użytkownika, które zostaje przekazane jako token użytkownika przez IIs do ASP.NET jako zwykły obiekt HttpContext ... tj. bieżąca sesja lub kontekst bieżącego użytkownika. W rzeczywistości nie zmienia WindowsIdentity, która uruchamia proces ASP.NET, po prostu przekazuje do niego token identyfikatora użytkownika. Korzystając z HttpContext, twój kod może używać tego identyfikatora lub nazwy do przechowywania praw do bazy danych w różnych sekcjach witryny. Ale nie wpłynie to na dostęp do pliku przez ASP.NET, ponieważ nie wpływa ani nie zmienia tożsamości rzeczywistego konta „procesu” aplikacji, które działa ASP.NET w IIs.
Nie dzieje się tak, dopóki nie wykonasz „Personifikacji”, która mówi ASP.NET, aby podszywał się pod token przekazywany mu przez IIs, a następnie uruchamiał się pod tym kontem. Możesz ustawić personifikację w swoim pliku web.config. Gdy aktywujesz personifikację w ASP.NET, WindowsIdentity zmienia się w procesie roboczym na dowolne uwierzytelnione konto przekazywane do ASP.NET z IIS, a następnie możesz uzyskiwać dostęp do plików, oczywiście na podstawie praw przypisanych do tego konta użytkownika. Ważne jest, aby pamiętać, że kiedy to nastąpi, jego tymczasowe i ASP.NET może powrócić do domyślnej tożsamości procesu, która jest w aktualnych wersjach IIs ponownie konta tożsamości puli aplikacji przypisanego do danej puli aplikacji.
Gdy usługi IIs po prostu używają zwykłego anonimowego konta użytkownika bez jawnego uwierzytelnienia ustawionego w programie ASP.NET, usługi IIs domyślnie uruchamiają konto tożsamości puli aplikacji przypisanej do witryny i przekazują je do programu ASP.NET oraz uruchomionego procesu roboczego. To konto tożsamości puli aplikacji przetwarza wszystkie żądania dotyczące usług IIS i uruchamia ASP.NET dla tej witryny.
Gdy II zaczyna się w tej konfiguracji i użytkownik ma do niego dostęp, w rzeczywistości domyślnie uwierzytelnia się za kulisami anonimowe konto IUSR, które określa dostęp do stron internetowych i innych podstawowych zasobów. Ale to konto NIE jest przekazywane do ASP.NET. I nie wpływa to na uruchamianie Tożsamości puli aplikacji IIS i na której ASP.NET działa.
Jeśli ustawisz Personifikowanie na „prawda”, powiedzmy na swój web.config, ORAZ używasz domyślnego anonimowego konta IUSR w IIs do publicznego dostępu, ORAZ ustawisz jawnie na true właściwość anonymousAuthentication w web.config (zamiast korzystania z systemu Windows lub inne konto logowania), II wyrzucą tożsamość puli aplikacji, a II i ASP.NET będą teraz uruchamiać swoje procesy aplikacji jako anonimowe uwierzytelnione i personifikowane konto IUSR.
Gdy to zrobisz, ASP.NET i jego procesy będą teraz działały na koncie IUSR .... tzn. Proces aplikacji ASP.NET uruchomi swoje konto WindowsIdentity jako konto IUSR. Możesz teraz zastosować dostęp do odczytu / zapisu do tego anonimowego konta IUSR i do folderów, do których konto ma mieć dostęp. (Uwaga: należy jednak dodać domyślne konto procesu, konto puli aplikacji dla puli, a także prawa do tych folderów. Zgodnie z zaleceniami Microsoftu)
Powodzenia!