2014-12-01 30 views
5

Prowadzę witrynę MVC wzdłuż strony Umbraco. Witryna MVC obsługuje własne uwierzytelnianie całkowicie oddzielone od Umbraco i uwierzytelnianie ASP.NET Forms. Ustawia plik cookie i używa go wewnętrznie do śledzenia rzeczy.Umbraco 7 niestandardowych plików cookie

Wszystko działa w porządku, ale jeśli jestem zalogowany na mojej stronie MVC z wyżej wymienionym zestawem plików cookie, staram się zalogować do sekcji administratora Umbraco, używając poprawnych danych Umbraco, uwierzytelnia mnie i przekierowuje do Sekcja administratora, ale wywołania WebAPI zaczynają się nie udać. Pierwsza to wywołanie: /umbraco/backoffice/UmbracoApi/UpdateCheck/GetCheck, która zwraca odpowiedź o błędzie HTTP 417 Missing token null.

Po usunięciu niestandardowego pliku cookie i odświeżeniu strony wszystko działa poprawnie.

Nie rozumiem, jak moje pliki cookie mogą zakłócać działanie Umbraco. Nie używa uwierzytelniania formularzy ASP.NET Forms ani niczego takiego.

Odpowiedz

1

Moja początkowa myśl polega na tym, że przez przypadek użyłeś wartości klucza do pliku cookie, który jest zarezerwowany przez Umbraco, co może spowodować odczytanie błędnego pliku cookie, powodując problemy. Rozwiązaniem tego problemu byłoby po prostu zmiana nazwy pliku cookie.

Jeśli to nie jest przypadek mam inną teorię:

żądań HTTP zawsze będzie zawierać wszystkie pliki cookie, który pasuje ścieżka/domena domeny zasobu którą wnioskujesz. Są one sortowane według długości ścieżki przede wszystkim, a po drugie przez czas utworzenia. Jeśli z jakiegoś powodu serwer Umbraco znajdzie plik cookie użyty do uwierzytelnienia na podstawie numeru indeksu (nie byłby nawet zaskoczony) na liście, a nie jako wartość kluczowa, Twój niestandardowy plik cookie spowodowałby przesunięcie indeksu, co spowodowałoby, że Umbraco spojrzałby na niewłaściwe ciasteczko

Jeśli więc zmiana nazwy ciasteczka nic nie dała, fajną rzeczą do wypróbowania mogłoby być ustawienie ścieżki pliku cookie na najkrótszą możliwą ścieżkę, co spowodowałoby, że przeglądarka umieści plik cookie dalej na liście, więc indeks się nie przesunie.

To tylko teoria, choć, więc jestem zainteresowani, jak to idzie :)

+1

Jest to kawałek w pytaniu -> https://github.com/umbraco/Umbraco-CMS/blob/5b9a98ad6ae9e63322c26f7b162204e34f7fcb54/src/Umbraco.Web/Editors/UpdateCheckController.cs widzę żadnych wskazówek, że pliki cookie są znalezione przez numer indeksu, przepraszam :) – Sniffdk

+0

Używam sesji w backoffice. W momencie ustawienia sesji dodawany jest dodatkowy plik cookie o nazwie ASP.NET_SessionId. Plik cookie zaczyna się od litery "A" i jest pierwszym w indeksie. Potem też dostaję te błędy. –

+0

@Sniffdk Cieszę się, że to słyszę :) – Scherling

1

Ten błąd występuje, ponieważ wniosek nie wysyła wymaganą kątowe nagłówki CSRF + ciasteczko. Nie jestem pewien, dlaczego tak jest, ale wydaje się dziwne, jeśli jest to wina twojego niestandardowego pliku cookie. Być może możesz podać nam więcej informacji na temat Twojego problemu: nazwa/wartość pliku cookie, kroki do odtworzenia, określona wersja Umbraco, środowisko hostingu itp.

Niektóre informacje, co się dzieje, to kod, który zwraca ten błąd jest tutaj:

https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/src/Umbraco.Web/WebApi/Filters/AngularAntiForgeryHelper.cs#L94

To gdzie są ciasteczka CSRF:

https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/src/Umbraco.Web/WebApi/Filters/SetAngularAntiForgeryTokensAttribute.cs

i ten atrybut jest stosowany do dwóch akcji, jednej do logowania i jednej, gdy pobieramy bieżące dane użytkownika:

to jest, gdy nagłówek jest ustawiony w JS:

https://github.com/umbraco/Umbraco-CMS/blob/5b9a98ad6ae9e63322c26f7b162204e34f7fcb54/src/Umbraco.Web.UI.Client/src/init.js#L11

zależności od hostingu środowiska/Setup nastąpił dziwne doniesienia o niektórych zapór stripping/zmiana danych, na przykład:

http://our.umbraco.org/forum/umbraco-7/using-umbraco-7/47340-Umbraco-7-plus-ISA-Server-2006

Mam nadzieję, że biorąc pod uwagę powyższe informacje, możesz wskazać, gdzie zaczyna się problem.