Вы не можете отделить часть олицетворения от части аутентификации. Я думаю, вы знаете это, так как вы пишете
... asp.net олицетворяет вошедшего в систему пользователя автоматически (или анонимную учетную запись, если не используется проверка подлинности Windows) ...
Но меня смущает предложение
Для обсуждения давайте предположим, что удостоверение установлено в IIS, а не в файле web.config.
Что именно вы подразумеваете под этим?
Но позвольте мне в любом случае дать ответ:
Предположим, вы используете IntegratedWindowsSecurity, <identity impersonate=true>
и <authentication mode=Forms>
в Web.config. Это будет соответствовать второй последней строке последней таблицы в Создание защищенных приложений ASP.NET: аутентификация, авторизация и безопасная связь , которые вы цитировали.
В нем говорится, что Domain\UserName
будет возвращено с WindowsIdentity
в этом случае. И я полагаю, вам интересно, откуда взялась эта Domain\UserName
-идентификация ... Существуют некоторые ограничения на использование Kerberos, например, IE должен классифицировать URL-адрес как "Интранет" или "Локальный", но я думаю, что это здесь не важно.
Теперь важно различать установку <authentication mode=windows>
в Web.config и настройку режима доступа на IntegratedWindowsSecurity
(или как он там называется) в IIS. Находясь в последней таблице вышеупомянутой ссылки, мы находимся в ситуации, когда IIS установлен на IntegratedWindowsSecurity (тем не менее мы можем установить <authentication mode="windows">
в Web.config!). Поэтому IE договаривается с IIS о том, как аутентифицировать текущего пользователя, вошедшего в систему . Либо с использованием NTLM или Kerberos (в основном в зависимости от версии Windows). Вот откуда приходит Domain\UserName
.
Следующая статья (о делегировании, я знаю) может пролить больше света на проблему Делегирование ASP.NET :
Встроенная проверка подлинности Windows
Когда Internet Explorer пытается
получить доступ к защищенному ресурсу, отправляет IIS
два заголовка WWW-Authenticate для
браузер, переговоры и NTLM.
Заголовок согласования отправляется только IIS
работает на Windows 2000 или более поздней версии. это
заголовок указывает, что IIS поддерживает
Протокол согласования, который позволяет
переговоры между Интернетом
Explorer и IIS о том, использовать ли
Kerberos или NTLM аутентификация. IIS
использует Kerberos, если оба клиента
(Internet Explorer 5.0 и более поздние версии) и
сервер (IIS 5.0 и выше) работают
Windows 2000 или более поздняя версия, и обе
члены одного домена или доверенные
домены. В противном случае сервер
по умолчанию используется NTLM.
Поскольку NTLM аутентифицирует пользователя для
IIS без предоставления пользователю
учетные данные для IIS, IIS не может
делегировать учетные данные этого пользователя
удаленная машина.
При использовании совместно с Kerberos
проверка подлинности v5, IIS может делегировать
учетные данные безопасности среди компьютеров
под управлением Windows 2000 или более поздней версии, которые
доверенный и настроенный для делегирования.
Возможно, вы знаете эти ссылки, но я все равно их публикую:
EDIT:
Чтобы быть более точным, я думаю (не уверен здесь), что IIS создает WindowsIdentity
из LogonToken
(тот, который вы получаете, вызывая неуправляемую функцию Win32 LogonUser
), используя объясненный конструктор здесь, в MSDN . Также весьма интересен пример кода в документации WindowsIdentity Class (например, IntPtrStringTypeConstructor
). Тогда маркер входа должен прийти из IE.
Скотт Хансельман также писал о подобной вещи:
И я думаю, что вы сможете извлечь дополнительную информацию, если будете искать решения для «имплантации» пользовательского главного объекта в процесс аутентификации ASP.NET (обычно с использованием Application_AuthenticateRequest
в Global.asax
). Например, Использование пользовательского принципала с проверкой подлинности с помощью форм в ASP.NET , например.
Или можете использовать Отражатель и убедитесь сами:)