Angular 4 Odata (ASP.net) Проверка подлинности Windows в Chrome
У меня есть служба Angular 4, которая вызывает OData API. У меня есть настройки API для работы с аутентификацией Windows, это работает через IE (версия 11), но не с Chrome, где он выдает:
Не удалось загрузить ресурс: сервер ответил со статусом 401 (не авторизован)
Затем следует:
XMLHttpRequest не может загрузить http://gbldnrgaptest1:53219/User. Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Поэтому происхождение ' http://gap/' не разрешено. Ответ имел HTTP-код состояния 401.
Я использую следующие методы для создания своих опций для каждого отправленного запроса:
private GetOptions(): RequestOptionsArgs{
let options : RequestOptionsArgs;
options = {
headers : this.GetHeaders(),
withCredentials: true
};
return options;
}
private GetHeaders(): Headers {
let headers = new Headers();
headers.append("OData-Version","4.0");
headers.append("Content-Type","application/json;odata.metadata=minimal");
headers.append("Accept","application/json");
return headers;
}
На моем API я включил CORS:
var cors = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*", exposedHeaders: "*")
{
SupportsCredentials = true
};
config.EnableCors(cors);
Я также включил проверку подлинности Windows в web.config:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Windows"></authentication>
</system.web>
Мой IIS также разрешен только для проверки подлинности Windows:
Кто-нибудь знает, что я могу пропустить?
Я чувствую, что это проблема заголовка; например, когда я просто запускаю запрос get в Chrome, например, перейдя к http://gbldnrgaptest1:53219/User
он возвращается просто отлично, SOAP UI работает, как только я добавляю в NTLM аутентификацию.
1 ответ
Чтобы все заработало, пришлось сделать следующее:
Добавьте следующее в Web.Config:
<authorization>
<allow verbs="OPTIONS" users="*"/>
<deny users="?" />
</authorization>
Это произошло потому, что отправляемый предполетный запрос, по-видимому, не отправляет учетные данные, и это привело к возникновению ошибки. Теперь, когда вышеприведенные правила установлены, необходимо снова включить анонимную аутентификацию; затем набор правил в Web.Config отфильтрует то, что проходит, позволяя анонимно выполнять только запрос OPTIONS.