.NET Core 2 WebAPI CORS проблемы с интерфейсом Angular 4 и Windows Auth

Да, у меня есть бесчисленное количество статей и я перестроил добавление app.UserCors и другие советы, но я все еще застрял.

Использование Visual Studio WebAPI Core 2 с веб-интерфейсом Angular 2.

Использование проверки подлинности Windows на удаленном сервере с использованием IIS 8.5 (на самом деле это тоже не работает локально).

Конфигурация запуска WebAPI:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<SomeContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SomeDB")));

    //////// ********************
    //////// Setup CORS
    //////// ********************
    var corsBuilder = new CorsPolicyBuilder();
    corsBuilder.AllowAnyHeader();
    corsBuilder.AllowAnyMethod();
    corsBuilder.WithOrigins("*"); 
    corsBuilder.AllowCredentials();

    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll", corsBuilder.Build());
    });

    services.AddMvc();

...


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors("AllowAll"); //<===            

    app.UseMvc();

...

Когда я запускаю WebAPI локально или развертываю его на удаленном сервере, интерфейс My Angular 4 дает мне:

Для вызова контроллера WebAPI - 401 (Неавторизованный) (даже на контроллерах, для которых не установлено [Authorize()].

Когда я пытаюсь использовать свой локальный экземпляр приложения Angular для доступа к удаленному WebAPI:

На запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Следовательно, к источнику "http://localhost:62482" не разрешен доступ. Ответ имел код состояния HTTP 401.

Я пробовал изменить порядок добавления сервисов в автозагрузке.

Я вручную добавил заголовки respone в IIS8.5 (они перезаписываются при развертывании нового кода).

Я полностью удалил все материалы CORS из приложения WebAPI.

Я КЛЯНУТЬСЯ, все это работало одновременно. Не уверен, что изменилось.

У меня все работает нормально, когда я развертываю и приложение WebAPI Core 2, и веб-приложение Angular на удаленном сервере, потому что источники одинаковы, но это делает локальную отладку невозможной.

*** Угловой код РЕПО по запросу:

import { Injectable, Inject } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { DocumentModel } from '../models/document.model';
import 'rxjs/add/observable/from';
import 'rxjs/add/operator/map';
import { map } from 'rxjs/operators/map';
import { IRepository } from './IRepository';
declare var API_URL: string;

@Injectable()
export class DocumentRepository implements IRepository<DocumentModel, number> {
    GetByDocument(key: any): Observable<DocumentModel[]> {
        throw new Error("Method not implemented.");
    }
    private httpService: Http;
    private apiRootUrl: string;

    constructor(http: Http) {
        this.httpService = http;
        this.apiRootUrl = API_URL;
    }

    Create(Model: DocumentModel): Observable<any> {
        throw new Error("Method not implemented.");
    }

    Find(key: any): Observable<DocumentModel[]> {
        return this.httpService.get(this.apiRootUrl +'documents/mine').map(result => result.json());
    }

    Get(id: any): Observable<DocumentModel> {
        return this.httpService.get(this.apiRootUrl +'documents/' + id).map(result => result.json());
    }
}


person user3637002    schedule 27.08.2018    source источник
comment
Ваш .net core api всегда обслуживается на одном и том же порте, т.е. 62482, вы также можете попробовать добавить это в свою функцию конфигурации app.UseCors(builder => builder.WithOrigins("http://localhost") .AllowAnyHeader() ); и также опубликовать свою угловую настройку ... @ user3637002   -  person Vaibhav Kumar Goyal    schedule 27.08.2018
comment
Также покажите код Angular 2, который выполняет вызов API (включая заголовки / настройки CORS).   -  person Peter B    schedule 27.08.2018
comment
Измените WithOrigins("*") на AllowAnyOrigin. И попробуйте добавить его в свой контроллер вручную, чтобы протестировать его с атрибутом [EnableCors("AllowAll")]   -  person penleychan    schedule 27.08.2018
comment
›› Изменить, WithOrigins (*) на AllowAnyOrigin. И попробуйте добавить его в свой контроллер вручную, чтобы протестировать его с атрибутом [EnableCors (AllowAll)] ›› Все это уже пробовали ... без кубиков.   -  person user3637002    schedule 27.08.2018


Ответы (1)


Это работает для меня: в Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseAuthentication();

        //app.UseHttpsRedirection();
        app.UseCors(
            options => options.AllowAnyOrigin().AllowAnyHeader()
                                               .AllowAnyMethod()
                                               .AllowCredentials()
        );
        app.UseMvc();
    }

и все, никаких других упоминаний о Корсе.

Я использую токен на предъявителя JWT, и [Авторизация] работает по назначению.

Вы можете сначала попробовать Postman, просто чтобы увидеть, работает ли ваша конечная точка, а затем перейти к созданию Angular http.get ()

Это угловая часть

const headers = new HttpHeaders().
                    set('Accept', 'application/json')

const url = 'http://localhost:5000/api/'  

return this.http.get(
   url + 'endpoint',
   { headers: headers }
);  
person wFitz    schedule 27.08.2018
comment
Нужна ли мне вообще какая-либо авторизация в моем приложении Angular? API использует проверку подлинности Windows и, похоже, отлично работает на сервере для определения личности пользователей. Эти проблемы возникают только при локальном запуске и попытке доступа к удаленному серверу. - person user3637002; 27.08.2018
comment
FYI SWAGGER всегда работает, когда я использую его для тестирования API. Похоже, это проблема с угловым веб-приложением. - person user3637002; 27.08.2018