2014-12-02 56 views
0

我一直在內部開發密碼重置工具。 該工具使用Windows身份驗證(Intranet應用程序)。 這個測試在本地運行時很完美,但是當我發佈到IIS併發送解鎖或重置命令時,它使用iis服務器的計算機帳戶聯繫AD(顯然然後它沒有解鎖或重置的權限)ASP.Net/IIS認證問題

附件是我的網絡配置文件

<?xml version="1.0" encoding="utf-8"?> 

<configuration> 

    <configSections> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     <section name="dotless" type="dotless.Core.configuration.DotlessConfigurationSectionHandler, dotless.Core" /> 
    </configSections> 

    <appSettings> 
     <add key="webpages:Version" value="3.0.0.0" /> 
     <add key="webpages:Enabled" value="false" /> 
     <add key="ClientValidationEnabled" value="true" /> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 

    <system.web> 
     <compilation debug="true" targetFramework="4.5" /> 
     <httpRuntime targetFramework="4.5" /> 
     <identity impersonate="true"/> 
     <authentication mode="Windows" /> 
     <authorization> 
      <deny users="?" /> 
     </authorization> 
     <httpHandlers> 
      <add path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler, dotless.Core" /> 
     </httpHandlers> 
    </system.web> 

    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /> 
       <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" /> 
       <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 

    <dotless minifyCss="false" cache="true" web="false" /> 

    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <handlers> 
      <add name="dotless" path="*.less" verb="*" type="dotless.Core.LessCssHttpHandler,dotless.Core" resourceType="File" preCondition="" /> 
     </handlers> 
    </system.webServer> 

    <connectionStrings> 
     <add name="CCLPasswordManagementEntities" connectionString="metadata=res://*/Models.PasswordManagementModel.csdl|res://*/Models.PasswordManagementModel.ssdl|res://*/Models.PasswordManagementModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=10.200.123.16;initial catalog=CCLPasswordManagement;persist security info=True;user id=FrameworkAPI;password=a5t3r1x!;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

    <entityFramework> 
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
      <parameters> 
       <parameter value="mssqllocaldb" /> 
      </parameters> 
     </defaultConnectionFactory> 
     <providers> 
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     </providers> 
    </entityFramework> 

</configuration> 

一定有什麼明顯我缺少的IIS中我假設的配置。

任何想法,將不勝感激。

這裏是重置密碼的代碼

using (var context = new PrincipalContext(
         ContextType.Domain)) 
        { 
         string userid = userName.Split('\\').LastOrDefault(); 
         if (userid != null) 
         { 
          using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userid)) 
          { 
           if (user != null) 
           { 
            user.SetPassword(password); 
            user.ExpirePasswordNow(); 
           } 
           else 
           { 
            return false; 
           } 
          } 
         } 
         else 
         { 
          return false; 
         } 
        } 
        return true; 

回答

0

在Active Directory中服務帳戶,並使用它。您可以使用代碼中的憑據,也可以使用web.config中的模擬元素來模擬此服務帳戶:

<identity impersonate="true" userName="DOMAIN\ServiceAccount" password="password"/>

+0

我想要的是,通過身份驗證的用戶使用他們的憑據進行解鎖,這樣我們就會在AD日誌中找到跟蹤信息。如果我們使用的服務帳戶像你建議那麼它將是通用的 – 2014-12-02 22:33:37

0

在IIS中,單擊您的網站,然後單擊身份驗證圖標。確保禁用匿名身份驗證並僅啓用Windows身份驗證。

+0

是的,我可以確認是這種情況 – 2014-12-03 19:25:31

+0

你是如何發送解鎖或重置命令?也許發佈一些代碼? – 2014-12-03 22:53:27

+0

這裏沒有問題是重置密碼代碼(正如我之前說的那樣在本地工作,但不在IIS上) – 2014-12-03 23:06:00