0

所以我正在尝试建立一个需要 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 提示命令对我不起作用。然而,这些更改现在迫使我输入我的详细信息以进行身份​​验证 - 但尽管我正确输入了我的用户名和密码,但仍然失败(我也让其他人尝试过,但他们也失败了)。我认为也可能发生跨域问题。因为我无法使用我的用户名登录,但如果我在旧域上使用用户名(因为机器是旧域的一部分),那么该登录工作 - 但所有用户帐户都在新域上。

4

1 回答 1

0

所以事实证明服务器所在的域与第二个域不信任 - 所以无法验证用户。

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

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

学到了很多东西:)

于 2013-03-14T04:57:02.443 回答