После обновления 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.Любая помощь будет очень признательна