6

Mam nadzieję, że jest to proste pytanie dla kogoś.Przekierowanie MVC z niestandardowymi nagłówkami

Zasadniczo po otrzymaniu żądania mojego kontrolera MVC, chcę:

  1. Dodaj „zezwolenie” nagłówek odpowiedzi
  2. przekierowanie do innej aplikacji siedzi na innej domenie
  3. Przeczytaj " "Nagłówek autoryzacji" w tej witrynie zewnętrznej.

Wygląda na akt przekierowania, usuwa wszystkie moje niestandardowe nagłówki i przekierowania.

Moje pytanie, jak dodać nowy nagłówek, I wykonać przekierowanie, I czy ten nagłówek pojawia się w nagłówkach hosta odbierającego [na końcu przekierowania], aby przeczytać?

Odpowiedz

2

Nie - przekierowanie 302 jest obsługiwane przez przeglądarkę i nie będzie ponownie dołączać nagłówków.

Opcje:

  • stronie serwera proxy
  • wykorzystywać cookies zamiast innych nagłówków (jeśli jest to ta sama domena, nie twoja sprawa za 2)
  • obsługi po stronie klienta przekierowanie (może być ok, ponieważ robisz mimo to wywołanie AJAX).
+0

Powiedz mi więcej o tej "ręcznej stronie przekierowania klienta (może być ok, ponieważ i tak wykonujesz wywołanie AJAX)." – user1265146

+0

Podoba mi się ten pomysł ... powiedz mi więcej o tej "ręcznej stronie przekierowania klienta (może być ok, ponieważ i tak wykonujesz wywołanie AJAX)." Musiałbym ustawić nagłówek auth i otworzyć go w nowym oknie lub karcie. – user1265146

+0

@ user1265146 - "manual", tak jak otrzymujemy normalną odpowiedź 200 z twojego serwera, która zawiera coś takiego jak '{header: XXXX, location: url}' i tworzymy drugie żądanie AJAX do tej lokalizacji.Teraz, ponieważ prawdopodobnie chcesz publikować w innej domenie, możesz nie mieć możliwości złożenia tego wniosku (chyba że ta inna domena obsługuje CORS). –

8

Nie możesz. Tak nie działa HTTP. Po pierwsze, "przekierowanie" to tylko kod stanu 301, 302 lub (od HTTP 1.1) 307 z nagłówkiem Location ustawionym na adres URL, do którego powinien przejść klient. Klient inicjuje żądanie do tego adresu URL, więc nie masz wpływu na to, jakie nagłówki wysyłają.

Po drugie, HTTP jest bezpaństwowcem, więc fakt, że nagłówek Authorization został wysłany w jakiejś odpowiedzi w pewnym momencie, ma zero mając na uwadze wszystko, co dzieje się w przyszłych zamówieniach. Przeglądarki internetowe i inne klienty HTTP omijają bezpaństwowy charakter protokołu HTTP, używając sesji po stronie serwera i plików cookie po stronie klienta. Klient przesyła plik cookie do serwera wraz z żądaniem. Plik cookie pasuje do pozycji w magazynie sesji na serwerze, a serwer ładuje dane z tej sesji, aby wyglądał tak, jakby był utrzymywany stan.

Po trzecie, pliki cookie nie działają w tej sytuacji, ponieważ są powiązane z domeną i nie są wysyłane wraz z żądaniami do domen, z których nie pochodzą. Tak więc, nawet jeśli utworzysz sesję, aby zachować autoryzację, druga strona nigdy jej nie zobaczy.

FWIW, podstawowa zasada tutaj, dzieląca stan uwierzytelnienia z inną domeną, to dokładnie dla jakich technologii takich jak OAuth zostały opracowane. Więc bezpośrednie przyszłe badania w tym kierunku.

+0

@chrris Dziękuję za bardzo dokładną odpowiedź. Właściwie używam OAuth, ale z bardzo konkretnym przypadkiem użycia, w którym nie przekierowujemy do logowania, wszystko jest polecane przez "zaufaną aplikację", teraz chciałbym umieścić token w nagłówku, aby inna "zaufana aplikacja "może odczytać oświadczenia i odpowiednio je przetwarzać ... wszystko bez przekierowania do idP. Alexei wspomniał o zrobieniu tego w kliencie, co jest możliwe, ponieważ mam token na kliencie. Po prostu muszę mieć możliwość dodania nagłówka autoryzacji i żądanie odpalenia w nowej karcie/oknie. Zakładam, że to możliwe? – user1265146

+2

To, co opisujesz, jest właśnie tym, czego protokół OAuth i HTTP celowo uniemożliwia. To nie ty * określasz, co jest i nie jest "zaufaną aplikacją", to jest * użytkownik *. Odbywa się to poprzez uwierzytelnienie ze znaną jednostką. Gdy zaangażuje się inny podmiot, uwierzytelnianie jest konieczne, ponieważ użytkownik nie ufał temu nowemu podmiotowi. Nie ma sposobu, aby się do tego przyzwyczaić * według projektu *. Być może byłaby to ogromna wada bezpieczeństwa. –