У меня есть приложение, в котором веб-интерфейс (реагировать) и веб-API (.net) развернуты на двух разных серверах. Однако, когда я устанавливаю свою аутентификацию API на Windows, она продолжает выдавать ошибку: Failed to load resource: the server responded with a status of 401 (Unauthorized)
Я могу просматривать ссылку на развернутое приложение, когда у меня есть следующие настройки:
UI Site: Windows Authentication<br>
API Site: Anonymous Authentication.
Но это не помогает мне получить зарегистрированный идентификатор пользователя. Это возвращает имя iis / app-pool как зарегистрированный пользователь.
Итак, я изменил настройки на следующие:
UI Site: Windows Authentication<br>
API Site: Windows Authentication and ASP.NET Impersonation.
Теперь я получаю ошибку авторизации в пользовательском интерфейсе, когда он попадает в первый API. Обратите внимание: если я получаю прямой доступ к API-ссылке, она возвращает мне результат, а также дает мой идентификатор пользователя в виде зарегистрированного идентификатора пользователя.
Я попробовал различные решения, предложенные в Интернете, включая шаги с 1 по 4 для следующего:
Как передать учетные данные для проверки подлинности Windows от клиента в службу веб-API , но пока безуспешно.
Кто-нибудь сталкивался с такой проблемой и нашел исправление?
Edit:
Я продолжил шаги, предложенные Александром Родригесом в ответе ниже. Я включил CORS, как описано в ссылке.
Первый выпуск был: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute
.
Итак, я добавил путь к сайту:
[EnableCors(origins: "http:myexample.com", headers: "*", methods: "*", SupportsCredentials = true)]
Это исключительно не помогло, тогда я добавил следующие строки в web.config:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="POST,GET" />
<add name="Access-Control-Allow-Origin" value="http://myexample.com" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Headers" value="cache-control,content-type,man,messagetype,soapaction" />
</customHeaders>
</httpProtocol>
Следующая ошибка, которую я получил, была:
The value of the 'Access-Control-Allow-Credentials' header in the response is 'true, true' which must be 'true'.
и
The value of the 'Access-Control-Allow-Origin' header in the response is 'http://myexample.com, http://myexample(index).com' which must be 'http://myexample.com'
Итак, в крайнем случае, я прокомментировал ниже строку из моего WebAPI и повторно развернул приложение.
[EnableCors(origins: "http:myexample.com", headers: "*", methods: "*", SupportsCredentials = true)]
Это сработало! Это привело к тому, что приложение показало результат для обоих контроллеров: один, где я установил Авторизацию, а другой без Авторизации.
Ошибки генерировались только контроллером, к которому я добавил [Авторизовать], потому что другой чаще всего возвращал результат.
Итак, мой вопрос: так должны работать обычные аутентификация и авторизация или я прокомментировал очень важную часть Авторизации?
Обновить:
Так что это делает только GET запросы на работу, а не POST.
Заголовок запроса:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: cache-control,content-type,man,messagetype,soapaction
Access-Control-Allow-Methods: POST,GET
Access-Control-Allow-Origin: http://myexample.com
**Response Header**
Provisional headers are shown
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Origin: http://myexample.com
Referer: http://myexample.com/form/1001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36