Почему моя веб-страница MVC3 не отправляет учетные данные Windows в IIS Express? - PullRequest
3 голосов
/ 08 ноября 2011

Я изо всех сил пытался заставить Windows Authentication работать с моим приложением MVC3 в процессе разработки (VS 2010 SP1), но пока мне не повезло. Я использую XP на своей машине разработчика (нет денег до следующего года на обновление), если это имеет значение. Следует также упомянуть, что я использую IIS Express в качестве сервера веб-разработки по умолчанию из VS 2010.

Некоторое время назад я начал с пустого приложения MVC3, поскольку у меня не было шаблона Intranet, доступного из меню VS, пока я вчера не обновил инструменты MVC3 (хорошо, я был немного медленным). После того, как я установил и проверил этот шаблон, я добавил ссылку на DirectoryServices в свой проект и добавил фрагмент кода, который отображает текущего вошедшего в систему пользователя в правом верхнем углу страницы. Согласно графике, теперь должно появиться сообщение «Добро пожаловать, PCE \ dnewman!»

Я следовал прекрасным инструкциям в этом посте: IIS Express Windows Authentication и добился определенных успехов. Однако теперь я получаю сообщение об ошибке 401.2 от IIS Express, сообщающее, что я не авторизован ...

Итак, я вошел в свойства своего проекта и установил анонимную аутентификацию на Включено. Теперь я могу получить доступ к веб-странице, но то, что я вижу в правом верхнем углу моей страницы, - "Добро пожаловать!" - нет имени пользователя.

Я пробовал это с IE и Firefox, с тем же результатом. Что за $ # ^ &! я здесь скучаю? Кажется, я не вошел в Windows! С чего мне начать искать проблему?

У предыдущего работодателя пару лет назад я написал приложение для Windows Forms, которое аутентифицировало пользователя по его учетным данным для входа в Windows. В этом случае мне пришлось проявить особую осторожность, чтобы отправить и учетные данные, и затем явно подтвердить их подлинность на стороне службы. Что мне нужно сделать, чтобы браузер включал учетные данные при каждом GET или POST?

По запросу вот содержимое моего web.config с извинениями за все настройки Glimpse.

<?xml version="1.0" 
  encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="glimpse" 
         type="Glimpse.Core.Configuration.GlimpseConfiguration" />
  </configSections>
  <appSettings>
    <add key="ClientValidationEnabled" 
     value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" 
     value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" 
             targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <trace writeToDiagnosticsTrace="true" 
       enabled="true" 
       pageOutput="false" />
    <httpModules>
      <add name="Glimpse" 
       type="Glimpse.Core.Module" />
    </httpModules>
    <httpHandlers>
      <add path="glimpse.axd" 
       verb="GET,POST" 
       type="Glimpse.Core.Handler" />
    </httpHandlers>
  </system.web>
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="false"/>
        <windowsAuthentication enabled="true" />
      </authentication>
    </security>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="Glimpse" 
       type="Glimpse.Core.Module,Glimpse.Core" 
       preCondition="integratedMode" />
    </modules>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add name="Glimpse" 
       path="glimpse.axd" 
       verb="GET,POST" 
       type="Glimpse.Core.Handler,Glimpse.Core" 
       preCondition="integratedMode" />
    </handlers>
  </system.webServer>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_IReporting" 
             maxBufferSize="1024000" 
             maxBufferPoolSize="1000000" 
             maxReceivedMessageSize="1024000">
          <readerQuotas maxDepth="200" 
                    maxStringContentLength="65536" 
                    maxArrayLength="32768" 
                    maxBytesPerRead="4096" 
                    maxNameTableCharCount="16384" />
          <security mode="None" />
        </binding>
        <binding name="normalBinding">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint name="tcpAdminServiceEndpoint" 
            address="net.tcp://PCESRV22.pce.local:9000/ProductionMonitor/AdminService" 
            binding="netTcpBinding" 
            bindingConfiguration="normalBinding" 
            contract="Contracts.IAdmin" />
      <endpoint name="tcpMasterDataServiceEndpoint" 
            address="net.tcp://PCESRV22.pce.local:9010/ProductionMonitor/MasterDataService" 
            binding="netTcpBinding" 
            bindingConfiguration="normalBinding" 
            contract="Contracts.IMasterData" />
      <endpoint name="tcpReportingServiceEndpoint" 
            address="net.tcp://PCESRV22.pce.local:9030/ProductionMonitor/ReportingService" 
            binding="netTcpBinding" 
            bindingConfiguration="NetTcpBinding_IReporting" 
            contract="Contracts.IReporting" />
    </client>
  </system.serviceModel>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" 
                      publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" 
                     newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <glimpse enabled="true" />
</configuration>

Я более чем готов разглашать больше деталей по мере необходимости, но я действительно даже не знаю, с чего начать. Кажется, что каждый пост или статья, которую я могу найти, предполагает, что эта часть просто происходит как часть установки Windows / MVC3 / ASP.NET.

Спасибо, Дейв

1 Ответ

6 голосов
/ 15 ноября 2011

Если вы будете следовать всем рекомендациям в ссылочном посте, вы получите нерабочий беспорядок, как я сделал.У каждого ответа есть свои достоинства, но применение всех из них заканчивается лишь разочарованием.

Сообщение от Microsoft, которое ответило на все вопросы и заставило меня работать, находится здесь: Как создать сайт интрасети с использованием ASP.NET MVC

Сохраните эту ссылку, она золотая ...

Я также обнаружил, что опция «Добавить развертываемые зависимости» может нарушить проверку подлинности Windows.Если я выбрал параметр «Веб-страницы ASP.NET с синтаксисом Razor» в диалоговом окне «Добавить развертываемые зависимости», он немедленно нарушил проверку подлинности Windows и, похоже, вернулся к проверке подлинности с помощью форм - я получил ошибку 404 »Ресурс не может бытьнашел "ищу" / аккаунт / логин.Мне не нужно было его развертывать, просто выбор этой опции сломал ее.Единственный способ исправить это - начать все сначала.Мне не удалось удалить достаточно данных, чтобы заставить его снова начать работать, и я не смог определить, какие изменения были внесены, что вызвало такое поведение.

Этот пост в блоге спас день: Как выполнить развертываниеприложение ASP.NET MVC 3 для веб-хостинга с «\ bin Deployment» - показывает, какие сборки необходимы и как включить их в ваше веб-приложение при его развертывании БЕЗ использования чепухи «Добавить развертываемые зависимости».

Надеюсь, это сэкономит кому-то часы, которые я потратил, пытаясь заставить все это работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...