Как получить заголовок авторизации ответа AJAX [дубликат]

18
задан Kirby 23 November 2015 в 19:59
поделиться

2 ответа

Сначала немного:

Вы используете Access-Control-Allow-Headers, который указывает, какие заголовки request позволяют клиенту разрешить отправить , но вы не указываете, какие заголовки response позволяют клиенту разрешить читать . Чтобы клиент мог читать непростые заголовки ответов, вам нужно использовать Access-Control-Expose-Headers. На странице HTML5 Rocks CORS :

Во время запроса CORS метод getResponseHeader() может получить доступ только к простым заголовкам ответов. Простые заголовки ответов определяются следующим образом:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Истекает
  • Last-Modified
  • Pragma

Если вы хотите, чтобы клиенты имели доступ к другим заголовкам, вы должны использовать заголовок Access-Control-Expose-Headers. Значение этого заголовка представляет собой список заголовков ответов с разделителями-запятыми, которые вы хотите открыть клиенту.

Итак, учитывая эту новую информацию, вы можете:

HttpContext.Current.Response.AddHeader("Access-Control-Expose-Headers", "Set-Cookie");

... но это еще не все.

Теперь, фактический ответ:

Здесь есть еще одна серьезная проблема: спецификация XHR явно запрещает чтение Set-Cookie .

Предположим, что домен A выполняет междоменный запрос в домен B. Когда домен B устанавливает куки-файлы, он устанавливает доменную зону -специфические файлы cookie только для домена B . Любая попытка домена A для чтения файлов cookie домена B является нарушением политики одинакового происхождения для доступа к файлам cookie.

Я не знаю WCF, поэтому я не уверен в наилучшем способе на самом деле делают то, что вы хотите, но я бы предположил, что решение может состоять в том, чтобы передать токен аутентификации не через файлы cookie (например, заголовок X-WCF-Auth?), который домен A читает, а затем устанавливает свой собственный файл cookie.

59
ответ дан apsillers 19 August 2018 в 09:54
поделиться

Политики безопасности браузера могут блокировать ваш ответ, потому что вы не установили:

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials","true");

Если это не помогает, попробуйте добавить

xhrFields: { withCredentials: true }

к своему ajax также могут быть полезны.

0
ответ дан Ataur Rahman Munna 19 August 2018 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: