Вы видите две вещи, которые обычно путают в ASP.NET:
- «идентификатор пользователя» - аутентификация учетной записи пользователя не имеет ничего общего с учетной записью или идентификатором, который фактически работает под управлением IIs и ASP.NET. Анонимная аутентификация позволяет любому пользователю получить доступ к любому общедоступному контенту, не предоставляя имя пользователя и пароль для браузера клиента. Анонимная учетная запись IUSR, которая проходит проверку подлинности по умолчанию в IIS, просто применяет доступ к общедоступному контенту веб-сайта. Это не влияет на процессы или ресурсы, используемые базовыми II или службами ASP.NET.
- «идентификатор приложения» - это фактическая учетная запись WindowsIdentity на сервере, которая фактически работает за IIS и ASP.NET, то есть учетная запись идентификатора пула приложений, назначенная пулу IIs и предоставленная ASP.NET. Ваш процесс ASP.NET по умолчанию выполняется под этой учетной записью удостоверения пула приложений (называемой виртуальной учетной записью в IIs версии 7.5+).
Объяснение: Во-первых, «аутентификация» в ASP.NET - это просто событие, обычно настраиваемое в web.config, который регистрирует учетную запись пользователя, которая передается IIs в качестве маркера пользователя в ASP.NET как обычный объект HttpContext ... т.е. текущий сеанс или контекст текущего пользователя. На самом деле он не меняет WindowsIdentity, на которой выполняется процесс ASP.NET, а просто передает ему маркер идентификатора пользователя. Используя HttpContext, ваш код может использовать этот идентификатор или имя для хранения прав на базу данных для различных разделов вашего сайта. Но это не повлияет на доступ к файлам в ASP.NET, поскольку не влияет и не влияет на идентичность действительной учетной записи «процесса» приложения, которая запускает ASP.NET под II.
Этого не произойдет, пока вы не выполните «Олицетворение», которое заставляет ASP.NET выдавать себя за любой токен, передаваемый ему II, и затем запускать его под идентификатором учетной записи. Вы можете установить олицетворение в вашем web.config. Когда вы активируете олицетворение в ASP.NET, WindowsIdentity действительно изменяется в рабочем процессе на любую аутентифицированную учетную запись, передаваемую в ASP.NET из IIS, и вы можете затем обращаться к файлам, конечно же, на основании того, какие права вы назначаете этой учетной записи пользователя. Важно отметить, что когда это происходит, это временно, и ASP.NET может вернуться к своему идентификатору процесса по умолчанию, который в текущих версиях II снова является учетной записью удостоверения пула приложений, назначенной данному пулу приложений.
Когда IIs просто использует обычную анонимную учетную запись пользователя без явной проверки подлинности, установленной в ASP.NET, IIs по умолчанию запускает назначенную веб-сайту учетную запись идентификатора пула приложений пула приложений и передает ее ASP.NET и рабочему процессу, выполняющему ее. Эта учетная запись удостоверения пула приложений обрабатывает все запросы на IIS и запускает ASP.NET для этого сайта.
Когда IIs запускается при этой настройке и к нему обращается пользователь, он фактически по умолчанию аутентифицирует за кулисами анонимную учетную запись IUSR, которая определяет доступ к веб-страницам и другим основным ресурсам. Но эта учетная запись НЕ передается в ASP.NET. И это не влияет на работу IIS удостоверения пула приложений и на котором работает ASP.NET.
Если вы установили Impersonate в значение «true», скажем, в своем web.config, И вы используете анонимную учетную запись IUSR по умолчанию в II для публичного доступа, и вы в явном виде установили истинное свойство anonymousAuthentication в web.config (вместо использования Windows или другой учетной записи для входа в систему), II будут отбрасывать идентификатор пула приложений, а II и ASP.NET теперь будут запускать свои процессы приложений в качестве анонимной IUSR-аутентифицированной и олицетворенной учетной записи.
Когда вы сделаете это, ASP.NET и его процессы теперь будут работать под учетной записью IUSR .... т.е. процесс приложений ASP.NET будет запускать свою учетную запись WindowsIdentity в качестве учетной записи IUSR. Теперь вы можете применить доступ на чтение / запись к этой анонимной учетной записи IUSR и к папкам, к которым вы хотите получить доступ к этой учетной записи. (Примечание: обязательно добавьте учетную запись процесса по умолчанию, учетную запись пула приложений для пула, а также права на эти папки. Это согласно рекомендации Microsoft)
Удачи!