Проверка подлинности Windows в ASP.NET Core: вход в систему вручную или автоматический вход в интрасеть и доступные группы

9

У меня есть приложение ASP.NET Core 3.0, которое работает с локальной аутентификацией Windows в интрасети для идентификации вошедших в систему пользователей. Используя стандартные способы аутентификации Windows, я могу захватить пользователя WindowsIdentityбез проблем.

Однако в зависимости от того, как пользователь вошел в браузер с помощью автоматического входа в браузер интрасети (т. Е. Без пароля) или явного входа с помощью диалогового окна «Пароль браузера», я получаю разные результаты для групп пользователей .

Ниже приведен запрос API, который возвращает информацию о пользователе, включая отфильтрованный список членства в группе (исключая встроенные учетные записи). Слева - вход в систему вручную, справа - автоматический вход.

Для явного входа в систему я правильно вижу все пользовательские группы, в которые входит пользователь. Однако для автоматического входа те же группы не отображаются:

групповые различия для ручного и автоматического входа

Я также внимательно посмотрел на экземпляры User и Identity на сервере, и они ссылаются на идентичные идентификаторы SID для пользователя, поэтому кажется странным, что разные результаты возвращаются для членства в группе.

Любые идеи, почему список групп отличается, когда я возвращаю ту же учетную запись? Обратите внимание, что группы являются локальными, поэтому это не должно быть проблемой из-за доступа к домену.

Примечание: я тестирую локально даже на localhost, и чтобы проверить это, я установил здесь настройки Windows Proxy:

Конфигурация входа

С выключенными флажками я вынужден войти. Когда они включены (в любом случае в браузерах Chromium), я должен явно вводить свои учетные данные в диалог входа в браузер.

Рик Страл
источник

Ответы:

9

Пользователь вышел из своего компьютера с момента добавления в эти группы?

Перечисленные группы хранятся в токене пользователя. Я думаю, что может произойти, что автоматический вход в систему отправляет существующий маркер входа пользователя (созданный при входе в Windows), поэтому он не будет содержать группы, в которые он был добавлен с момента последнего входа в систему.

Ввод имени пользователя и пароля вручную приводит к новому входу в систему и, таким образом, получает новый токен со всеми группами во время входа в систему. Так что новые группы появятся там.

Габриэль Люси
источник
1
После некоторой дополнительной проверки выясняется, что вы абсолютно правы. Первоначально я думал, что перезагрузил машину, так как проблемы проявились, но после принудительного выхода из системы и входа в систему я обнаружил, что действительно после повторного входа я смог увидеть группы. Спасибо - так очевидно в ретроспективе, но так легко пропустить.
Рик Страл