Основной веб-API Asp.net с использованием Windows-аутентификации - Cors-запрос не авторизован - PullRequest
0 голосов
/ 02 мая 2018

В моем основном веб-интерфейсе asp.net я настроил Cors в соответствии со статьей из Документация MS . Приложение веб-API использует проверку подлинности Windows (анонимная проверка подлинности не включена). Политика Cor создана и добавлено промежуточное программное обеспечение, как показано ниже в startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("CorsPolicy",
            builder => builder.WithOrigins("http://localhost:4200")
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials()
            );
    });

    services.AddMvc().AddJsonOptions(options => {
        options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{         
    //Enable CORS policy 
    app.UseCors("CorsPolicy");
    app.UseMvc();
}

Также применяется политика для уровня контроллера

[EnableCors("CorsPolicy"), Route("api/[controller]")]
public class LocationController : BaseController<Location>
{
  //code
}

Запрос параметров становится неавторизованным. Запрос и ответ выглядят как

enter image description here

Я видел похожие вопросы и пробовал почти все решения, но запрос опций все еще не удался.

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

Использование IIS CORS Module решило проблему великолепно. Ниже URL-адрес для справки.

Работа с аутентификацией Windows Хотя это ни в коем случае не единственный сценарий, решаемый модулем CORS, он был достаточно важен, чтобы вызывать вызов. Ранее, если вы пытались сделать междоменный запрос к приложению, которое использовало проверку подлинности Windows, ваш запрос предварительной проверки не выполнялся, так как браузер не отправлял учетные данные с запросом предварительной проверки. Не было способа обойти это без включения анонимной аутентификации в вашем приложении. Поскольку модуль CORS включается перед аутентификацией, он позволяет обрабатывать предполетный запрос без ущерба для модели безопасности вашего приложения. Вот пример того, как может выглядеть ваш web.config.

https://blogs.iis.net/iisteam/getting-started-with-the-iis-cors-module

Пример кода:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- To customize the asp.net core module uncomment and edit the following section. 
         For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
         <system.web>
        <authentication mode="Windows"/>
    </system.web>
  <system.webServer>
  <cors enabled="true" failUnlistedOrigins="true">
            <add origin="http://localhost:60096" allowCredentials="true" >
            <allowHeaders allowAllRequestedHeaders="true">
                    <add header="Header1" />
                </allowHeaders>
            </add>
        </cors>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\Project.Api.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>
0 голосов
/ 10 мая 2018

Это очень похоже на CORS включен, но ответ на предпечатную проверку имеет неверный код состояния HTTP 404 при отправке JSON и предоставил решение, работающее на меня (у меня была ошибка 401 при запросах POST). Также NTLM и Negotiate не должны быть настроены одновременно ( Negotiate V / s NTLM ).

0 голосов
/ 11 мая 2018

Похоже, вы хотите пройти учетные данные или вместе с запросом.

Пожалуйста, проверьте эту ссылку для добавления учетных данных / разрешения учетных данных пользователя.

Будьте внимательны при разрешении перекрестных учетных данных. Веб-сайт в другом домене может отправлять учетные данные вошедшего в систему пользователя в приложение от имени пользователя без ведома пользователя. В спецификации CORS также указывается, что установка источника "*" (все источники) недопустима, если присутствует заголовок Access-Control-Allow-Credentials.

0 голосов
/ 04 мая 2018

Возможно, вы захотите прочитать эту ветку: https://github.com/aspnet/CORS/issues/60. Вы можете смешивать анонимный и NTLM, чтобы ваши предварительные просмотры CORS не были отклонены (так как они не включают учетные данные Windows). IIS обрабатывает проверку подлинности NTLM еще до того, как она попадает в промежуточное ПО, так что это, вероятно, вещь IIS. Возможно, вам придется разрешить анонимные проверки перед проверкой COR.

...