Проблема аутентификации при отладке в VS2013 - iis express

103

Я пытаюсь подобрать имя пользователя Windows при отладке в Visual Studio 2013. Я просто использую:

httpcontext.current.user.identity.name

Если я запускаю это на своем Dev Server, он работает нормально, если я запускаю его в режиме отладки в любой предыдущей версии 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>
Нил Уотсон
источник

Ответы:

215

Я только что обновился до VS 2013 с VS 2012, и текущий идентификатор пользователя (HttpContext.User.Identity) проходил как анонимный.

Я попытался изменить IIS express applicationhost.config, без разницы.

Решение состояло в том, чтобы посмотреть свойства веб-проекта, нажать F4, чтобы получить свойства проекта, когда у вас выбран верхний уровень проекта. Не щелкайте проект правой кнопкой мыши и не выбирайте свойства, это совсем другое.

Измените параметр «Анонимная проверка подлинности» на «Отключить» и «Проверка подлинности Windows» на «Включено».

Работает как подливка :)

Тоби Симмерлинг
источник
10
Спасибо за это. Я не могу поверить, что они добавили это как «улучшение». Для этого и нужен web.config. Теперь мы не можем доверять тому, что видим в web.config. Блестяще.
trucker_jim
4
Я считаю, что это лучший подход, чем принятый ответ, поскольку он не повлияет на другие приложения, работающие в IIS Express.
niaher
Огромное спасибо. Это тоже помогло мне! Это был проект Visual Studio 2008, который я обновил до Visual Studio 2013.
Роб К.
В VS 2012 я использовал: «Использовать Visual Studio Development Server». Итак, обновление, и это сработало. Хотя теперь он запускает IIS Express.
Thomas Koelle
Этот ответ должен быть принятым, если вы только что перешли на VS 2013.
Nishant
130

Изучая это, я нашел свой ответ, но не могу найти ответ в Интернете, поэтому решил поделиться этим:

Я исправил свою проблему, изменив файл applicationhost.config. Мой файл был сохранен в папке «\ Мои документы \ 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>
Нил Уотсон
источник
2
Мне пришлось сделать это, чтобы получить отладку в VS2013 с использованием IIS Express для надежной работы. Без этого вроде бы работал нормально один раз, потом 401. (1) Существует ли команда AppCmd, которая изменяет файл applicationhost.config, и (2) клавиша F4 в веб-проекте позволяет мне выключить анонимную аутентификацию и включить аутентификацию Windows. Выполнение этого в VS2012 работало нормально, в VS2013 не создается 401 бесплатная среда разработки.
IanT8 04
4
@ Нил, ты спас мне день. BTW: выключать не обязательно anonymousAuthentication. Достаточно включить windowsAuthentication. Эти параметры определяют, какие механизмы аутентификации разрешено использовать веб-сайтам.
chiccodoro
+1 также ... какое-то время пытался решить эту назойливую проблему с помощью моего локального IISExpress isntance
Джефф Льюис
Ах, вот как это сделать. Гений. Спасибо за этот совет, действительно полезный!
Майк Гледхилл
1
Мне пришлось удалить «Согласование», чтобы иметь возможность протестировать вызов веб-службы (с WSE3) без получения 401.
Wolf5
41

В Visual Studio 2013 И VS15 (но я предполагаю, что то же самое для всех других версий) просто нажмите F4 и измените эти два свойства: - Анонимная проверка подлинности: отключить - Проверка подлинности Windows: включить

ThaNet
источник
1
Спасибо за это. Я не могу поверить, что они добавили это как «улучшение». Для этого и нужен web.config. Теперь мы не можем доверять тому, что видим в web.config. Блестяще.
trucker_jim
1
Вы только что спасли меня от отката на Visual Studio 2010!
Жюльен П.
2
Не могу поверить, что это не был вопрос / ответ №1 из всех этих SO-сообщений, которые продолжают говорить о настройках IIS
Lost
38

В VS2013 F4 в вашем проекте для просмотра окна свойств и отключения анонимного доступа и включения «проверки подлинности Windows»

Тогда все заработает. Больше ничего менять не нужно

Джеймс Прессли
источник
К сожалению, эта опция существует, когда вы хотите отлаживать веб-проект, но не существует для сервисных проектов. Grrrr ...
Майк Гледхилл
9

VS 2015 меняет это. Он добавил в мой веб-проект папку .vs и там был applicationhost.config. Я внес предложенные изменения (проверка подлинности окна = true, anon = false), и он начал выдавать имя пользователя вместо пустого.

Том Макдональд
источник
8

Откройте файл applicationHost.config, расположенный в папке C: \ Users [идентификатор пользователя] \ Documents \ IISExpress \ config. Внутри этого файла измените overrideModeDefault для anonymousAthentication и windowsAuthentication на «Разрешить».

 <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 на «false» для 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.

нгиунта
источник
1
Эти изменения плюс выход из системы сработали для меня. Что-то кэшируется, потому что остановка IIS Express с помощью значка уведомления и перезапуск VS не работают. Эта ошибка действительно раздражает, она возникает каждые несколько месяцев или полгода при сборке новой виртуальной машины или ПК разработчика. Это всегда приводит к потере до полдня, возня с настройками. Проблема в том, что хотя эти настройки должны исправить это немедленно, это не так, и после игры он внезапно работает, очень странно, и мне это не нравится. Затем рекомендуется выйти из системы. В следующий раз, когда это произойдет, я попытаюсь изолировать, но это очень раздражает по умолчанию.
Тони Уолл
6

Вы также можете изменить свойства проекта для своего веб-проекта, выбрать «Интернет» на левой вкладке, а затем изменить раскрывающееся меню «Серверы» на «Локальный IIS». Создайте новый виртуальный каталог и используйте диспетчер IIS для настройки вашего сайта / пула приложений по своему усмотрению.

Я предпочитаю этот метод, так как у вас обычно есть локальный v-каталог (или сайт) IIS для локального тестирования. Вы также не повлияете на другие сайты.

Свойства веб-проекта

СкоттЛенарт
источник
1

Похоже, что правильный ответ дает user3149240 выше. Однако, как указал Нил Уотсон, здесь играет роль файл 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
EricksonG
источник
В текущей VS это не работает, он всегда будет говорить, что он заблокирован, даже если модули applicationhost.config были разблокированы как в пользовательских документах, так и в путях решения .vs / config. Также неверно, что это единственное место, настройки из окна свойств фактически хранятся в XML веб-проекта VS. Но это не имеет значения, потому что их изменение также не помогает, хост приложения всегда переопределяет. Чтобы эти изменения заработали, необходимо было выйти из системы, вот и все.
Тони Уолл
0

F4 не всегда приводит меня к этой панели. Кроме того, часто говорят, что картинка стоит тысячи слов.

введите описание изображения здесь

Вэйхуэй Го
источник