Проблема аутентификации при отладке в VS2013 - iis express
Я пытаюсь подобрать имя пользователя Windows при отладке в Visual Studio 2013. Я просто использую:
httpcontext.current.user.identity.name
Если я запускаю его на своем Dev-сервере, он работает нормально, если я запускаю его в режиме отладки на любой предыдущей версии Visual Studio, он также работает нормально.
Мои проблемы: если я запускаю это на visual studio 2013, я получаю пустую строку.
Мой веб-конфиг выглядит следующим образом.
<system.web>
<authentication mode="Windows"/>
<identity impersonate="false"/>
<authorization>
<allow users="*"/>
</authorization>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
<customErrors mode="Off"/>
</system.web>
8 ответов
Когда я изучал это, я нашел свой ответ, но не могу найти ответ в Интернете, поэтому я решил поделиться этим:
Я исправил проблему, изменив файл applicationhost.config. Мой файл был сохранен в папке "\My Documents\IISExpress\config".
Похоже, что VS2013 игнорировал мой файл web.config и применял разные методы аутентификации.
Мне пришлось изменить эту часть файла, чтобы она выглядела так, как показано ниже. По правде говоря, я только изменил anonymousAuthentication на false, а режим windowsAuthentication на true.
<authentication>
<anonymousAuthentication enabled="false" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
Я только что обновился до VS 2013 с VS 2012, и текущая идентификация пользователя (HttpContext.User.Identity) стала анонимной.
Я попытался изменить IIS express applicationhost.config, без разницы.
Решением было посмотреть свойства веб-проекта, нажать F4, чтобы получить свойства проекта, когда у вас выбран верхний уровень проекта. Не кликайте правой кнопкой мыши по проекту и не выбирайте свойства, это нечто совершенно другое.
Измените "Анонимная проверка подлинности" на "Отключено" и "Проверка подлинности Windows" на "Включено"
Работает как соус
В Visual Studio 2013 и VS15 (но я думаю, что то же самое для всех других версий) просто нажмите F4 и измените эти два свойства: -Анонимная аутентификация: отключить-Аутентификация Windows: включить
В VS2013 F4 на вашем проекте откройте окно свойств и отключите анонимный доступ и включите "Аутентификацию Windows"
Тогда это будет работать. Не нужно ничего менять
VS 2015 меняет это. Он добавил папку.vs в мой веб-проект, и там было приложение applicationhost.config. Я сделал предложенные изменения (аутентификация окна = true, anon=false), и он начал предоставлять имя пользователя вместо пробела.
Откройте файл applicationHost.config, расположенный в папке C:\Users[userid]\Documents\IISExpress\config. Внутри этого файла измените overrideModeDefault для anonymousAthentication и windowsAuthentication на "Allow"
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Allow" />
<section name="basicAuthentication" overrideModeDefault="Deny" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="digestAuthentication" overrideModeDefault="Deny" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="windowsAuthentication" overrideModeDefault="Allow" />
</sectionGroup>
Затем измените lockItem на "ложь" для AnonymousAuthenticationModule и WindowsAuthenticationModule
<system.webServer>
<modules>
<!--
<add name="HttpCacheModule" lockItem="true" />
-->
<add name="DynamicCompressionModule" lockItem="true" />
<add name="StaticCompressionModule" lockItem="true" />
<add name="DefaultDocumentModule" lockItem="true" />
<add name="DirectoryListingModule" lockItem="true" />
<add name="IsapiFilterModule" lockItem="true" />
<add name="ProtocolSupportModule" lockItem="true" />
<add name="HttpRedirectionModule" lockItem="true" />
<add name="ServerSideIncludeModule" lockItem="true" />
<add name="StaticFileModule" lockItem="true" />
<add name="AnonymousAuthenticationModule" lockItem="false" />
<add name="CertificateMappingAuthenticationModule" lockItem="true" />
<add name="UrlAuthorizationModule" lockItem="true" />
<add name="BasicAuthenticationModule" lockItem="true" />
<add name="WindowsAuthenticationModule" lockItem="false" />
Внесение этих изменений позволит существующим параметрам веб-конфигурации переопределить то, что находится в файле applicationHost для IIS Express.
Вы также можете изменить свойства проекта для своего веб-проекта, выбрать "Интернет" на левой вкладке, а затем изменить раскрывающийся список "Серверы" на "Локальный IIS". Создайте новый виртуальный каталог и используйте диспетчер IIS для настройки пула вашего сайта / приложения.
Я предпочитаю этот метод, так как у вас обычно есть локальный v-каталог IIS (или сайт) для локального тестирования. Вы также не будете влиять на другие сайты.
F4 не всегда приводит меня к этой панели. Кроме того, часто говорят, что картинка стоит тысячи слов.
https://st ackru.com/images/817cf2804f42b339605e430c51adcaeb1b0ef769.png
Похоже, что правильный ответ предоставлен пользователем 3149240 выше. Однако, как отметил Нил Уотсон, файл applicationhost.config находится здесь.
Изменения могут быть сделаны на панели свойств VS или в файле, хотя и в другом месте. В нижней части файла applicationhost.config находится набор элементов местоположения. Кажется, что у каждого приложения для IIS Express есть одно из них. Изменение настроек в пользовательском интерфейсе обновляет этот раздел файла. Таким образом, вы можете изменить настройки через пользовательский интерфейс или изменить этот файл.
Вот пример с отключенной анонимной авторизацией и включенной аутентификацией Windows:
<location path="MyApp">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
Это эквивалентно в пользовательском интерфейсе VS:
Anonymous Authentication: Disabled
Windows Authentication: Enabled