网站错误 - 需要代理身份验证

时间:2013-03-13 23:57:22

标签: asp.net

所以我试图建立一个需要Windows身份验证的内部网站 - 以便将这些凭据用于代理服务器。

代码调用Rally API传递代理服务器设置:

var webProxy = new WebProxy(WebConfigurationManager.AppSettings["WebProxyUrl"], Convert.ToInt32(WebConfigurationManager.AppSettings["WebProxyPort"])) { UseDefaultCredentials = true };

var restApi = new RallyRestApi(username, password, webServiceUrl, webServiceVersion, webProxy);

将其部署到服务器后,我收到错误消息:

远程服务器返回错误:(407)需要代理验证。

如果我更改应用程序池以使用我的个人帐户,那么该网站可以正常工作。但是,我不希望我的帐户与其绑定。

它似乎没有提示我使用我的Windows凭据登录,所以我想知道是否可能已经填满了。我的web.config包含:

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>


  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="RallyWebserviceUrl" value="https://rally1.rallydev.com" />
    <add key="RallyWebserviceVersion" value="1.39" />
    <add key="RallyUsername" value="REMOVED" />
    <add key="RallyPassword" value="REMOVED" />
    <add key="RallyPageSize" value="50" />
    <add key="WebProxyUrl" value="REMOVED" />
    <add key="WebProxyPort" value="8080" />
    <add key="BacklogRallyProject" value="REMOVED" />
    <add key="CurrentWorkRallyProject" value="REMOVED" />
  </appSettings>

  <system.web>
    <authentication mode="Windows"/>
    <pages>
      <namespaces>
        <add namespace="System.Web.Routing"/>
      </namespaces>
    </pages>
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/"/>
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/"/>
      </providers>
    </roleManager>
    <!--
            If you are deploying to a cloud environment that has multiple web server instances,
            you should change session state mode from "InProc" to "Custom". In addition,
            change the connection string named "DefaultConnection" to connect to an instance
            of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.
      -->
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection"/>
      </providers>
    </sessionState>
    <compilation debug="true"/>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

</configuration>

编辑 - 我还尝试按照以下大多数步骤为网站设置Windows身份验证: http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=15739768&linkID=9261340

dos提示命令对我不起作用。然而,这些更改现在迫使我输入我的身份验证细节 - 但是尽管我正确地输入了我的用户名和密码然后失败了(我也有其他人尝试,但它也失败了)。我认为也可能存在跨域问题。由于我无法使用我的用户名登录,但如果我在旧域上使用用户名(因为该计算机是旧域的一部分),则该登录有效 - 但所有用户帐户都在新域上。

1 个答案:

答案 0 :(得分:0)

事实证明,服务器位于一个与第二个域无法信任的域中 - 因此无法对用户进行身份验证。

第一个域用户是无法访问代理的系统帐户(因为它们被应用程序使用) - 并且结果表明服务器可以访问外部站点而无需通过代理。所以我更新了代码以不调用代理,重新启用匿名身份验证并且站点开始工作。

虽然是一项有趣的练习 - 因为在IIS7中需要做一些事情来设置Windows身份验证。我认为这是一个更新配置以使用Windows身份验证但被忽略的问题,因为该网站使用的是匿名身份验证。

学到了很多东西:)