Прежде чем написать это, я потратил много времени на поиск и пробу множества вещей, но ничего не помогло. Это .NetCore 2.2 Web Api, и я использую его из приложения Angular 8.
Если я вызываю веб-api из того же домена, он работает нормально.
Если я вызываю веб-api из другого домена (или локального хоста), он возвращает 401 (неавторизованный).
Если я вызываю веб-API из другого домена (или локального хоста) с отключенной аутентификацией Windows, он работает нормально (поэтому CORS настроен правильно).
В моем launchSettings.json у меня есть:
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
В моем web.config у меня есть:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" arguments="%LAUNCHER_ARGS%" />
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</location>
</configuration>
В IIS у меня включена проверка подлинности Windows и отключена анонимная проверка подлинности.
В моем Startup.cs у меня есть:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
а также
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
app.UseCors("CorsPolicy");
app.UseMvc();
}
Что мне не хватает? Есть идеи по этому поводу?