Проблема автентифікації під час налагодження в VS2013 - iis express


103

Я намагаюся підібрати ім'я користувача Windows під час налагодження у Visual Studio 2013. Я просто використовую:

httpcontext.current.user.identity.name

Якщо я запускаю це на сервері Dev, він працює добре, якщо я запускаю його в режимі налагодження на будь-якій попередній версії 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". Тож оновлення і це спрацювало. Незважаючи на те, що зараз він працює IIS Express.
Thomas Koelle

Цей варіант повинен бути прийнятою відповіддю, якщо ви щойно перейшли до VS 2013.
Nishant

130

Коли я досліджував це, я знайшов свою відповідь, але не можу знайти відповідь в Інтернеті, тому я подумав, що поділюсь цим:

Я вирішив свою проблему, змінивши мій файл applicationhost.config. Мій файл був збережений у папці "\ Мої документи \ IISExpress \ config".

Схоже, VS2013 ігнорував мій файл web.config і застосовував різні методи аутентифікації.

Мені довелося змінити цю частину файлу, щоб вона виглядала нижче. По правді кажучи, я змінив лише анонімну автентифікацію на помилкову, а режим WindowsAuthentication - на істинний.

<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 у веб-проекті дозволяє мені вимкнути Anonymous Auth і активувати Windows Auth. Якщо у VS2012 працювали чудово, у VS2013 не створюється 401 безкоштовне середовище розробників.
IanT8

4
@Neil, ти врятував мені день. BTW: Не потрібно вимикати anonymousAuthentication. Досить включити windowsAuthentication. Ці налаштування керують механізмами аутентифікації, які веб-сайти дозволяється використовувати.
чікодоро

+1 також ... намагався на деякий час вирішити цю неприємну проблему з моїм місцевим інстанцією IISExpress
Джефф Льюїс

Ах, ТО як це зробити. Геніальність. Дякую за цю пораду, дуже корисна!
Майк Гледхілл

1
Мені довелося видалити "Переговори", щоб мати можливість перевірити виклик веб-сервісу (з WSE3), не отримуючи номер 401.
Wolf5

41

У Visual Studio 2013 AND VS15 (але я думаю, якщо це однаково для всіх інших версій) просто натисніть F4 та змініть ці два властивості: - Анонімна автентифікація: Вимкнути - Автентифікація Windows: Увімкнути


1
Дякую за це. Я не можу повірити, що вони додали це як «покращення». Саме для цього призначений web.config. Тепер ми не можемо довіряти тому, що ми бачимо в web.config. Блискуча.
trucker_jim

1
Ви щойно врятували мене від відкату до Visual Studio 2010!
Жюльєн П

2
Не можу вважати, що це не питання №1 з усіх цих публікацій ТА, які продовжують говорити про налаштування IIS
Втрачено

38

У VS2013 F4 у вашому проекті для перегляду вікна властивостей та відключення анонімного доступу та включення "Аутентифікації Windows"

Тоді це спрацює. Не потрібно нічого більше змінювати


Розчарувально ця опція існує, коли ви хочете налагодити веб-проект, але не існує для сервісних проектів. Grrrr ...
Майк Гледхілл

9

VS 2015 змінює це. Він додав папку .vs до мого веб-проекту, а applicationhost.config був там. Я вніс запропоновані зміни (автентифікація вікна = true, anon = false), і він почав вводити ім'я користувача замість порожнього.


8

Відкрийте файл applicationHost.config, розташований у папці C: \ Users [userid] \ Documents \ IISExpress \ config. Всередині цього файлу змініть команду overrideModeDefault для анонімнихATentication та 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 на "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 не працює. Ця помилка насправді дратує, вона виникає кожні кілька місяців чи півроку, коли вбудований новий VM або ПК для розробників. Це завжди призводить до втрати до півдня, возиться з налаштуваннями. Проблема полягає в тому, що ці налаштування повинні негайно виправити це, але це не так, і після того, як грати навколо нього раптом працює, дуже дивно, і мені це не подобається. Потім рекомендується виходити з системи. Наступного разу, коли це станеться, я спробую ізолювати, але це дуже дратує за замовчуванням.
Тоні Уолл

6

Ви також можете змінити властивості проекту для свого веб-проекту, вибрати "Веб" на лівих вкладках, а потім змінити спадний сервер на "Місцевий IIS". Створіть новий віртуальний каталог та використовуйте IIS-менеджер, щоб налаштувати свій сайт / пул за бажанням.

Я віддаю перевагу цьому методу, так як ви зазвичай маєте локальний IIS-каталог (або сайт) для тестування локально. Ви також не вплинете на інші сайти.

Властивості веб-проекту


1

Здається, що правильну відповідь надає користувач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 UI дорівнює:

Anonymous Authentication: Disabled
Windows Authentication: Enabled

У поточному VS це не працює, він завжди скаже, що він заблокований, навіть коли модулі applicationhost.config були розблоковані як в документах користувача, так і в рішеннях .vs / config шляху. Також це неправда, це єдине місце, налаштування з вікна властивостей фактично зберігаються у XML веб-проекту VS. Але це не має значення, оскільки їх зміна також не допомагає, applicationhost завжди змінюється. Вихід із системи був необхідний, щоб ці зміни працювали, ось і все.
Тоні Уолл

0

F4 не завжди приводить мене до цієї панелі. Крім того, часто кажуть, що картина вартує тисячі слів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.