User.Identity.Name является нулевым в веб-приложении Asp.Net Core 2.x с использованием аутентификации Windows - PullRequest
0 голосов
/ 05 сентября 2018

Задача

При размещении веб-приложения Asp.Net Core 2.0 или 2.1 за IIS с аутентификацией Windows, установленной в true, и Анонимной аутентификацией, установленной в false, свойство User.Identity.Name имеет значение null, а User.Identity.IsAuthenticated - false.

Согласно документации здесь , аутентификация Windows должна работать только в Asp.Net Core 2.x при хостинге с IIS.

Фон

Я нахожусь в процессе миграции приложения Asp.Net 4.x MVC на Asp.Net Core, следуя инструкции Миграция из ASP.NET MVC в ASP.NET Core MVC .

Я тестирую сайт на сервере, на котором в данный момент размещаются приложения Asp.Net 4.x MVC, которые без проблем используют проверку подлинности Windows. Идентификационные данные пользователя Windows доступны, как и ожидалось.

После завершения руководства по миграции и исправления всех проблем со сборкой я создал профиль «Local IIS» в разделе «Debug» в свойствах веб-проекта, установив для параметра «Launch» значение «IIS». Я поставил галочку только «Включить аутентификацию Windows» и затем перешел на сайт. Несмотря на то, что вы вошли в систему с действительными учетными данными домена, User.Identity.Name по-прежнему равен нулю.

Я установил .Net Core 2.1 SDK перед началом процесса миграции и ранее установил .Net Core 1.0.1 SDK Preview. Сервер работает под управлением Windows 2008 R2 с IIS 7.

Что я пробовал

Чтобы убедиться, что я не представил эту проблему во время процесса миграции, я создал новые веб-приложения ASP.NET Core, используя шаблон MVC и нацеленный на .NET Framework 4.7.2. Я настроил «Аутентификацию Windows» при выборе шаблона. После подтверждения того, что проверка подлинности Windows работает при использовании IIS Express, я настроил Local IIS, как указано выше. При просмотре в разделе IIS в правом верхнем углу панели навигации отображается «Hello,!». Я попробовал это с шаблонами из Asp.Net Core SDK 2.0 и 2.1.

Я следовал различным руководствам, и Stackoverflow отвечает на все вопросы, касающиеся настройки проверки подлинности Windows в самом приложении Asp.Net Core. Результатами были либо без изменений, либо постоянные запросы входа в систему, которые никогда не принимают действительные имя пользователя и пароль. Похоже, что эти решения могут быть написаны для более старых версий платформы или сценариев, где разработчик пытается объединить несколько методов аутентификации.

1 Ответ

0 голосов
/ 05 сентября 2018

Причина

На сервере установлен устаревший модуль IIS .Net Core 2.0, который по умолчанию не передает данные проверки подлинности Windows. Эта проблема описана здесь: .Net Core 2.0 Проект с ошибкой аутентификации Windows при публикации в IIS . Установка последней версии .Net Core 2.0 должна исправить это.

Это можно проверить, запустив в PowerShell следующее:

(Get-Item $env:SystemDrive\Windows\System32\inetsrv\aspnetcore.dll).VersionInfo

Это дает следующий вывод:

ProductVersion   FileVersion      FileName
--------------   -----------      --------
7.1.1967.0       7.1.1967.0       C:\Windows\System32\inetsrv\aspnetcore.dll

Серверу требуется версия 7.1.1972.0 или выше.

Решение 1 - Исправление проекта

В файле web.config, созданном Visual Studio 2017 при настройке Local IIS, добавьте forwardWindowsAuthToken="true" в качестве атрибута к элементу <aspNetCore>:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false" forwardWindowsAuthToken="true" />
    </system.webServer>
  </location>
  <system.web>
    <authentication mode="Windows" />
  </system.web>
</configuration>

Решение 2 - Общесистемное исправление

Загрузите и установите последнюю версию .Net Core Runtime со страницы .Net загрузок . Среда выполнения включает в себя Windows Hosting Bundle и необходимый модуль IIS. Если SDK уже установлен, он будет включать в себя среду выполнения, однако, для устранения этой проблемы может потребоваться повторная установка среды выполнения (выберите вариант исправления).

...