Я изо всех сил пытался заставить 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.
Спасибо, Дейв