Перенаправление MVC с пользовательскими заголовками

Надеюсь, это простой вопрос для кого-то.

В основном после получения запроса на мой controller MVC я хочу:

  1. Добавить заголовок «Авторизация» в ответ
  2. Перенаправление на другое приложение, сидящее на другом домене
  3. Прочитайте заголовок «Авторизация» на этом внешнем сайте.

Он выглядит как redirect, удаляет все мои собственные заголовки и перенаправляет.

Мой вопрос: как добавить новый заголовок и выполнить redirect? И чтобы этот заголовок отображался в заголовках принимающего хоста [в конце перенаправления] для чтения?

Вы не можете. Это не работает HTTP. Во-первых, «redirect» – это только код статуса 301, 302 или (начиная с HTTP 1.1) 307 с заголовком « Location установленным на URL, к которому должен идти клиент. Это клиент, который инициирует запрос к этому URL-адресу, поэтому вы не можете контролировать, какие заголовки они отправляют.

Во-вторых, HTTP не имеет гражданства, поэтому тот факт, что заголовок Authorization был отправлен в некотором ответе в какой-то момент, имеет нулевое отношение ко всему, что происходит в любых будущих запросах. Веб-браузеры и другие HTTP-клиенты обходятся вокруг безгражданности HTTP, используя сеансы на стороне сервера и cookies на стороне клиента. Клиент отправляет файл cookie на сервер с запросом. Куки-файлы соответствуют элементу в хранилище сеансов на сервере, и сервер загружает данные с этого сеанса, чтобы обеспечить внешний вид, как будто состояние сохранено.

В-третьих, cookies не работают в этой ситуации, потому что они связаны с доменом и не отправляются вместе с запросами доменов, из которых они не происходят. Таким образом, даже если вы должны были создать сеанс для поддержания авторизации, другой сайт никогда не увидит его.

FWIW, основная предпосылка здесь, совместное использование состояния аутентификации с другим доменом, – это именно то , для чего были разработаны технологии, такие как OAuth. Так что прямые будущие исследования в этом направлении.

Переадресация No-302 обрабатывается браузером, и он не будет прикреплять заголовки повторно.

Опции:

  • серверный прокси-сервер
  • используйте cookies вместо других заголовков (если это тот же домен, а не ваш случай за 2)
  • ручная перенаправляющая клиентская сторона (может быть, с тех пор, как вы делаете вызов AJAX).