Какие параметры проверки подлинности IIS позволят CORS и олицетворению сосуществовать в веб-приложении. NET? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть внутреннее веб-приложение, в котором у каждого есть имя пользователя и пароль Active Directory. Они входят в мое веб-приложение. Часть представления пользовательского интерфейса находится на одном сервере, а WebAPI - на другом сервере, поэтому мне пришлось реализовать CORS. Кроме того, одна функция в WebAPI записывает XML в файл на третьем сервере, поэтому я использую олицетворение именно для этой функции, где файл XML записывается с использованием учетных данных вошедшего в систему пользователя AD. Все авторизованные пользователи принадлежат к определенной c группе AD «EFI_Users» с разрешениями на запись на 3-й сервер.

У меня был один и тот же код на нашей паре серверов DEV и на нашей паре серверов TEST. CORS работал, но олицетворение не на DEV. Напротив, олицетворение работало, но CORS не на ТЕСТ. Я обнаружил, что серверы WebAPI имеют разные настройки IIS. Настройка анонимной аутентификации была разницей. На DEV анонимная аутентификация была включена, Windows аутентификация отключена. На TEST, наоборот: анонимный был отключен, Windows аутентификация была включена.

Установка анонимной аутентификации на ENABLE была секретом, чтобы CORS начал работать!

Но включение анонимной аутентификации сделало олицетворение перестал работать и дал мне эту ошибку:
«Анонимная личность не может выполнять олицетворение».

Я не знаю, что делать, чтобы CORS и олицетворение работали в одном приложении. Мне нужна помощь!

Вот что у меня есть. Я использую. NET 4.5.2, Visual Studio 2017 с C#, MVC, Javascript, Entity Framework и Breeze в шаблоне SPA.

В настройках UI и IAP WebAPI включена анонимная и Windows Аутентификация.

Мой пользовательский интерфейс web.config имеет следующий код:

  <system.web>
    <authentication mode="Windows" />
    <authorization>
      <allow roles="eFI_Users" />
      <deny users="*" />
    </authorization>
  </system.web>

Моя сеть WebAPI. В config есть этот код (установка impersonate = «true» приводит к сбою CORS)

  <system.web>
    <identity impersonate="false" />
    <authorization>
      <allow roles="eFI_Users" />
      <allow users="?" />
      <!--<deny users="*" />-->
    </authorization>
  </system.web>

Я думаю, что мой код CORS и код олицетворения C# настроен правильно, потому что каждый работает, когда анонимная аутентификация включена или отключена, соответственно .

Я где-то читал, что когда приложение использует ANONYMOUS AUTHENTICATION и

    -IMPERSONATION is disabled, the app pool identity is used to execute app code.
    or
    -IMPERSONATION is enabled, the NT Authority\IUSR account is used to execute app code.

Итак, у меня был отдельный пул приложений, настроенный с «LocalSystem» в качестве идентификатора пула приложений, затем попробовал оба impersonate = false в WebAPI web.config. Тот же конечный результат, что и при использовании AppPoolIdentity для идентификации:
«Анонимная идентификация не может выполнять олицетворение».

Одна вещь, которую я нахожу странной и не понимаю, я отображал оба User.Identity.Name и ((WindowsIdentity) User.Identity) .IsAnonymous в домашнем контроллере пользовательского интерфейса и в контроллере транзакций WebAPI до начала олицетворения. Получил эти результаты:

UI HomeController:              Name=(my userid), IsAnonymous=false
WebAPI TransactionController:   Name=null, IsAnonymouse=true

Не уверен, что я понимаю, что происходит с пользователем, когда он переходит в WebAPI. Начинается с аутентифицированного пользователя в пользовательском интерфейсе, но становится анонимным, когда он попадает в WebAPI. Мой web.config не так?

Мне нужен способ получить олицетворение для работы с включенным Anonymous. Или способ заставить CORS работать с отключенным Anonymous.

...