AngularJS на IIS: API Http Получить перенаправление на Chrome + OSx - PullRequest
0 голосов
/ 04 июня 2018

После обновления Chrome 66 у меня возникла проблема с Chrome.Вот ситуация: у меня есть веб-сайт интрасети, размещенный на IIS, он использует учетные данные Windows для регистрации пользователей.Я вызываю API, который также размещен в IIS, но в другом домене (и другом сервере), он также использует учетные данные Windows Authentication.

Вот пример http get:

 function getJobsCount() {
  return $http({
    method: 'GET',
    withCredentials: true,
    url: endpointUrl + 'SearchJobs/count',
    headers: {}
  });
}

Пример Web.config API

 <system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
  <remove name="ApplicationInsightsWebTracking" />
  <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
</modules>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://apiserver"/>
    <add name="Access-Control-Allow-Credentials" value="true"/>
    <add name="Access-Control-Allow-Headers" value="*"/>
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/>
  </customHeaders>
</httpProtocol>

И пример кода, используемого в API для вызова вызовов OPTIONS:

 public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        ModelBinders.Binders.DefaultBinder = new DevExpress.Web.Mvc.DevExpressEditorsBinder();

    }

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Context.Request.HttpMethod == "OPTIONS")
        {
            Context.Response.StatusCode = 200;
            Context.Response.AddHeader("Access-Control-Allow-Methods", "OPTIONS");
            Context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Pragma, Cache-Control, If-Modified-Since");
            var httpApplication = sender as HttpApplication;
            httpApplication.CompleteRequest();
        }
    }

Это прекрасно работает в Chrome + Windows.

Chrome + OSx запрашивает у меня дважды (первый раз для входа в интрасеть) и второй раз для входа на сервер API.Это может быть нормальным поведением, но начиная с Chrome v66 (W3C), chrome перенаправляет меня на URL страницы API!

Я не смог найти что-либо по предметам, я знаю, что это связано с кросс-происхождениеми новый Chrome.Любая помощь будет очень признательна

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