Это не простая задача для выполнения. Идентификация Windows вашего пользователя в интрасети будет доступна вам, только если включена аутентификация Windows в IIS, анонимная аутентификация отключена. Когда браузер пользователя подключается к серверу, IIS выполняет запрос / ответ NTLM для проверки пользователя. Обратите внимание, что этот запрос / ответ фактически возникает при каждом отдельном HTTP-запросе, а не только один раз.
Проблема с этим механизмом заключается в том, что ваша проверка подлинности с помощью форм больше не будет использоваться, так как она запускается после запуска проверки подлинности Windows, а неудачная проверка подлинности просто вызывает отказ в доступе IIS, а не откат к проверке подлинности с помощью форм.
Чтобы построить гибрид, вам необходимо:
Настройте основное веб-приложение для проверки подлинности пользователей с помощью проверки подлинности с помощью форм. Установите web.config следующим образом. Сгенерируйте свой собственный ключ компьютера - это ключ для обеспечения совместного использования файлов cookie
<authentication mode="Forms"><forms loginUrl="~/Account/LogOn" timeout="2880" path="/" enableCrossAppRedirects="true" name=".ASPXFORMSAUTH" protection="All" />
</authentication>
<machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" /> <system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true"/>
<windowsAuthentication enabled="false"/>
</authentication>
</security></system.webServer>
Создайте новое отдельное веб-приложение, которое будет использоваться исключительно для проверки подлинности NTLM. Это будет авторизовать, а затем перенаправить в основное приложение. Извините, два приложения не могут быть объединены.
В веб-приложении NTLM измените режим аутентификации web.config, как показано ниже:
<authentication mode="Windows">
</authentication>
<machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" />
<system.webServer>
....
<security>
<authentication>
<windowsAuthentication enabled="true"/>
<anonymousAuthentication enabled="false"/>
</authentication>
<ipSecurity>
<!-- put whatever here to restrict to your LAN
<add ..../>
-->
</ipSecurity>
</security>
</system.webServer>
В веб-приложении NTLM контроллер выполняет одно действие - извлекает имя пользователя из (WindowsPrincipal) Thread.CurrentPrincipal (); и вызывает FormsAuthentication.SetAuthCookie (..). Затем перенаправьте в основное веб-приложение. Не используйте WindowsIdentity.GetCurrent (), так как он не будет точным без включенной имитации [см. Msdn.microsoft.com/en-us/library/ff647076.aspx], которую вы не хотите использовать
Вы не можете проверить это в Cassini или IIS Express; Вы должны использовать IIS 7.5.
Перейдите к IIS 7.5 и включите делегирование функций для «Аутентификация - анонимная» и «Аутентификация - Windows».
Создание приложения IIS для приложения на основе форм
Щелкните правой кнопкой мыши на только что созданном приложении Forms и выберите «Добавить приложение». Укажите путь к приложению для проверки подлинности NTLM и имя, например «IntranetAuthentication»
При доступе через браузер http://localhost/YourSite для проверки подлинности с помощью форм и http://localhost/YourSite/IntranetAuthentication для просмотра проверки подлинности NTLM, а затем повторной проверки подлинности на главном сайте
В вашей компании попросите пользователей интрасети использовать вход в интрасеть. Внешне все используют обычную страницу аутентификации форм.