2016-10-11 2 views
2

Я работаю над приложением с угловым 2, которое выполняет служебные вызовы в службу ASP.NET Web API 2. В этой службе CORS была включена в WebApiConfig как так:Угловой 2 Войти с использованием тома идентификации ASP.NET

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     ... 

     var cors = new EnableCorsAttribute("*", "*", "*"); 

     config.EnableCors(cors); 

     ... 

    } 
} 

Это работает отлично, и я не имел никаких проблем с CORS. Например, вызов /api/users возвращает всех пользователей.

Теперь, однако, я пытаюсь использовать токен .NET Identity для функции входа в систему, которая дает мне проблемы, связанные с CORS. При вызове /token выполнить вход в мой login.service.ts:

loginUser(username: string, password: string) { 
    let serviceURL = 'http://myurl/token'; 

    let body = 'username=' + username + '&password=' + password + '&grant_type=password'; 

    let headers: Headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 

    let options: RequestOptions = new RequestOptions({ 
     headers: headers 
    }); 

    return this.http.post(serviceURL, body, options) 
     .map(res => this.extractData(res)) 
     .catch(this.handleError); 
} 

Я получаю следующее сообщение об ошибке:

XMLHttpRequest cannot load http://myurl/token. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 400.

Я нахожу это заблуждение по двум причинам:

  1. Как упоминалось выше, у меня нет проблем с CORS с любым вызовом /api
  2. Когда я ввожу правильные учетные данные, вызов «успешно» (т. Status Code 200, но я получаю ошибку, указанную выше.

Я просмотрел множество статей с аналогичной реализацией, и я не могу найти, что не так с моей.

ответ

1

Итак, я наконец нашел причину, по которой это произошло. Как выделено в here, кажется, что конечная точка /token инициализирована до того, как WebApiConfig есть, и поэтому любая конфигурация здесь не будет включать CORS для конечной точки /token.

Чтобы включить его для этой конечной точки, а также должны быть добавлены в IdentityConfig.csCreate функции следующего вида:

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
{ 

    context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); 

    ... 

} 
Смежные вопросы