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 procmon
zwraca 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
źródło
Html.RenderAction
, a potem zdałem sobie sprawę, że Razor używa,Html.Action
więc moje pierwsze wyszukiwania były puste.Odpowiedzi:
Czasami musisz cofnąć się o krok ... Przyczyną tego było,
Html.RenderAction()
moim zdaniem, wywołanie metody działania oznaczonej[Authorize]
atrybutem.źródło
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.
źródło
Będziesz miał takie samo zachowanie, gdy będziesz mieć filtr niestandardowej autoryzacji, który dziedziczy po
AuthorizeAttribute
jednym lub więcej wywołańOnAuthorization
metody, z jednym z nich ustawionymAuthorizationContext.Result
na `HttpUnauthorizedResult 'źródło
Z jakiegoś powodu rozwiązało to mój problem.
źródło
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.
źródło