ASP.NET Core Blazor Server + олицетворение Windows: серверная часть возвращает 401 на новом сервере IIS, работает на стаC#

Место общения программистов C#
Ответить
Anonymous
 ASP.NET Core Blazor Server + олицетворение Windows: серверная часть возвращает 401 на новом сервере IIS, работает на ста

Сообщение Anonymous »

Проблема
У нас есть приложение Blazor Server («интерфейс»), которое вызывает внутренний API ASP.NET.
Оба приложения размещены в IIS на одном компьютере, но в разных пулах приложений.
Аутентификация осуществляется только Windows Auth (без JWT, файлов cookie и т. д.).
На нашем старом сервере разработки эта настройка работает нормально.
Вкл. новый тестовый сервер с (по-видимому) идентичной конфигурацией IIS, каждый вызов от внешнего интерфейса к внутреннему возвращает 401 Unauthorized.
Настройка развертывания
  • Фронтенд: ASP.NET Core Blazor Server, размещенный в IIS
  • Бэкенд: ASP.NET, размещенный в IIS
  • Оба сайты на одном Windows Server, разные пулы приложений.
  • Аутентификация Windows включена, поставщики: Negotiate, NTLM (одинаковый
    порядок на обоих серверах).
  • Анонимная аутентификация отключена на обоих, Windows Auth включена на обоих.
  • Пользователи являются пользователями домена в AD; авторизация основана на ролях
Фронтенд использует DelegatingHandler для олицетворения текущего пользователя при вызове бэкенда
Что я вижу
На старом сервере разработки (работает):
Фронтенд показывает правильное имя пользователя в пользовательском интерфейсе.
Ведение журнала внутри DelegatingHandler показывает правильного пользователя домена.
Бэкэнд принимает вызов, возвращает 200, а журналы IIS показывают то же имя пользователя.
На новом тестовом сервере (не работает):
Фронтенд по-прежнему показывает правильное имя пользователя.
DelegatingHandler регистрирует правильный WindowsIdentity для запроса.
Бэкэнд возвращает 401 Несанкционировано.
В серверных журналах IIS столбец имени пользователя для этих вызовов имеет значение - (анонимный).
У нас есть страница отладки разрешений, которая выводит все группы/роли AD; для протестированных нами пользователей разрешения правильные и соответствуют тем, что работают на dev.
Это дамп из серверных журналов неудавшегося запроса:

Код: Выделить всё

---------------------------------------------------------------------------------------------------------------
| Field              | Value                                                                                  |
|--------------------|----------------------------------------------------------------------------------------|
| date               | 2025-11-18                                                                             |
| time               | 10:20:25                                                                               |
| s-ip               | 10.xxx.xxx.xxx                                                                         |
| cs-method          | POST                                                                                   |
| cs-uri-stem        | /_blazor/negotiate                                                                     |
| cs-uri-query       | negotiateVersion=1                                                                     |
| s-port             | 443                                                                                    |
| cs-username        | -                                                                                      |
| c-ip               | 10.xxx.xxx.xxx                                                                         |
| cs(User-Agent)     | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/138.0.0.0 Safari/537.36 |
| cs(Referer)        | https://vm-url.mah.roche.com/Meters                                       |
| sc-status          | 401                                                                                    |
| sc-substatus       | 2                                                                                      |
| sc-win32-status    | 5                                                                                      |
| time-taken (ms)    | 1875                                                                                   |
---------------------------------------------------------------------------------------------------------------

Конфигурация IIS (сайты, пулы приложений, поставщики Windows Auth) для внешнего и внутреннего интерфейса была скопирована 1:1 от разработчика для тестирования, насколько я могу судить.
Что я пытаюсь понять
Почему серверная часть видит запрос как анонимный (пользователь = - в журнале IIS), хотя:
  • Blazor работает под управлением Windows Auth
  • HttpContext.User является действительным пользователем домена
  • Используется WindowsIdentity.RunImpersonatedAsync(user.AccessToken, …)
В одном и том же поле разные пулы приложений. Есть ли какая-либо конфигурация Kerberos/NTLM/делегирования, которая могла бы вызвать эту разницу между двумя серверами?
Какие настройки учетной записи IIS / SPN / компьютера следует сравнить на двух серверах, чтобы понять, почему учетные данные не передаются на внутренний сайт?
Любые подсказки о том, что обычно вызывает ситуацию «интерфейсный интерфейс видит пользователя, серверная часть видит анонимный 401» на двух сайтах IIS на одном компьютере с Windows Auth и олицетворением, будут оценены, а также указатели на то, на что следует обратить внимание дальше (SPN, useKernelMode, NTLM) против Kerberos и т. д.).

Подробнее здесь: https://stackoverflow.com/questions/798 ... 1-on-new-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»