401 - Nieautoryzowane na serwerze 2008 R2 IIS 7.5


20

Mam aplikację internetową wdrożoną na serwerze 2008 IIS 7.5.

Z pilota daje ten błąd: 401 - Unauthorized: Access is denied due to invalid credentials. (zdalne = komputery stacjonarne w tej samej sieci LAN)

Wypróbowałem kilku zdalnych klientów korzystających z różnych przeglądarek, wszystkie z tego samego wyniku. (IE, FF i Chrome)

Uderzenie aplikacji z pulpitu samego serwera działa bezbłędnie . Jednak nie próbowałem Firebug na pulpicie serwera. Zakładam, że nadal wydaje kod stanu 401, ale mimo to zwraca treść. Zobacz aktualizację nr 2.

Aplikacja korzysta z Anonimowego Uwierzytelniania.

Aplikacja napisana jest w .NET 4.0 Asp.Net przy użyciu frameworka MVC.

Treść statyczna działa dobrze, przykład: http://server.com/content/image.jpg

Sysinternals procmonzwraca te 2 wyniki dla każdego żądania: SZYBKIE IO NIE DOPUSZCZONE i ŚCIEŻKA NIE ZNALEZIONA.

Mam 2 inne aplikacje MVC działające poprawnie na tym samym serwerze. Sprawdziłem zabezpieczenia folderów i wszystkie pasują do siebie.

Aplikacja działa dobrze na pudełku Server 2008 IIS 7.0.

Nic nie pojawia się w dzienniku zdarzeń na serwerze związanym z tym.

Wyciągając włosy tutaj, jakieś wskazówki dotyczące rozwiązywania problemów?

AKTUALIZACJA # 1 : Po prostu dostaję więcej WTF podczas kopania.

Jeśli kliknę aplikację w Menedżerze IIS -> Strony błędów -> wybierz Edytuj ustawienia funkcji Detailed Errors, aplikacja będzie działać zdalnie. Nie pozostawiając tego włączonego, więc problem nie został jeszcze rozwiązany, jest po prostu bardziej zagmatwany.

AKTUALIZACJA # 2 : Korzystając z Firebug, widzę, że status jest nadal 401 Unauthorized, ale Odpowiedź zwraca poprawny kod HTML aplikacji.

AKTUALIZACJA # 3 Zabawa ze śledzeniem nieudanych żądań, oto Śledzenie żądań OSTRZEŻENIE, które powoduje 401:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

Pokazuje to regularny dziennik IIS aktualizacji nr 4 :

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414

Czy próbowałeś uruchomić śledzenie nieudanych żądań na serwerze i uzyskać dostęp do aplikacji ze zdalnego komputera. Jeśli wystąpi awaria, powinieneś zobaczyć przyczynę.
Vivek Kumbhar

@vivek zobacz moją najnowszą aktualizację
mxmissile,

ARRG !!! Ale znowu to! 2 godziny zmarnowałem na wyszukiwanie Html.RenderAction, a potem zdałem sobie sprawę, że Razor używa, Html.Actionwięc moje pierwsze wyszukiwania były puste.
mxmissile,

Och, minęło kilka lat, zgadnij co? Właśnie zmarnowałem 3 godziny tego ranka PONOWNIE! Kiedy nauczę się?!?!?!
mxmissile,

Odpowiedzi:


19

Czasami musisz cofnąć się o krok ... Przyczyną tego było, Html.RenderAction()moim zdaniem, wywołanie metody działania oznaczonej [Authorize]atrybutem.


1
To był mój problem, było wystarczająco frustrujące, by uderzyć pandę (nie żebym to zrobił). Dzięki mxmissile.
Khalid Abuhakmeh

4

Ponieważ działa lokalnie, ale nie zdalnie, wydaje mi się, że anonimowe konto użytkownika nie ma dostępu do czegoś, ale robi to użytkownik systemu Windows. Aby to udowodnić, wyłącz uwierzytelnianie systemu Windows dla witryny internetowej i sprawdź, czy nie psuje się lokalnie.

Wszystko, co się psuje, prawdopodobnie działa jako tożsamość witryny zamiast tożsamości puli aplikacji, w przeciwnym razie ulegnie awarii lokalnie i zdalnie. Moje zalecenie, jeśli masz 1 do 1 mapowania witryn na pule aplikacji lub masz wysoce zaufane środowisko, jest ustawienie konta anonimowego użytkownika na używanie tożsamości puli aplikacji. Nie musisz się więc martwić o drugiego użytkownika.

Wspomniałeś o eksploratorze procesów. Jest to przydatne do wyszukiwania informacji o działaniu, ale narzędziem, które najprawdopodobniej wykryje błędy odmowy dostępu, jest procesmon (również z sysinternals). Spróbuj, wypróbuj i przechwyć, a następnie wyszukaj słowo „odmowa”. Powinno to włączyć wszelkie problemy odmowy dostępu na dysku.


4

Będziesz miał takie samo zachowanie, gdy będziesz mieć filtr niestandardowej autoryzacji, który dziedziczy po AuthorizeAttributejednym lub więcej wywołań OnAuthorizationmetody, z jednym z nich ustawionym AuthorizationContext.Resultna `HttpUnauthorizedResult '


4

Z jakiegoś powodu rozwiązało to mój problem.

  1. Kliknij witrynę w IIS.
  2. Uwierzytelnianie podwójnym kliknięciem
  3. Kliknij prawym przyciskiem myszy i wybierz Ustawienia zaawansowane
  4. Usuń zaznaczenie opcji „Włącz uwierzytelnianie w trybie jądra”

2

Czy sprawdziłeś ustawienia w Regułach autoryzacji? Jeśli ktokolwiek może uzyskać dostęp do tej strony (która wydaje się Twoim celem), upewnij się, że masz regułę „Zezwalaj”, która zawiera kolumnę „Wszyscy użytkownicy”.

Następnie w „Uwierzytelnianiu” upewnij się, że nie ma żadnych konfliktów i włączono tylko Uwierzytelnianie anonimowe.

Mam nadzieję, że to pomaga.


1
Zezwól - Wszyscy użytkownicy - Dziedziczone
mxmissile
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.