2012-01-30 34 views
5

Przekształcamy niektóre z naszych aplikacji internetowych, które działały w ramach uwierzytelniania formularzy, aby teraz działały jako uwierzytelnianie systemu Windows. Chcę odtworzyć zabezpieczenia strony, które zawiera uwierzytelnianie formularzy przy minimalnej modyfikacji rzeczywistych stron. Udało mi się odtworzyć pożądany efekt za pomocą uproszczonej aplikacji internetowej. Używam aplikacji na zintegrowanym potoku IIS 7.5 Server 2008 R2.Przekierowywanie uwierzytelniania systemu Windows do niestandardowej strony 401

Stworzyłem prostą aplikację 3-stronicową z wykorzystaniem uwierzytelniania systemu Windows. Trzy strony to:

  • Openpage.aspx, że jest otwarty na każdy uwierzytelniony użytkownik
  • Blockedpage.aspx który jest zablokowany dla wszystkich użytkowników (symboliczne z katalogu lub strony, które byłyby zablokowane do podzbioru użytkowników w oparciu o rolę użytkownika)
  • ErrorPage.aspx, jeśli strona blockedpage.aspx jest dostępna (i odrzucona), aplikacja powinna przesłać dalej do ErrorPage.aspx, gdzie użytkownik otrzymuje ogólne informacje o aplikacji.

web.config dla aplikacji:

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
     <authentication mode="Windows"/> 
     <authorization> 
     <deny users="?" /> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    <location path="blockedpage.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <system.webServer> 
    <httpErrors errorMode="Custom" > 
     <remove statusCode="401" subStatusCode="-1" /> 
     <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 

    <validation validateIntegratedModeConfiguration="false" /> 
    <defaultDocument> 
     <files> 
     <clear /> 
     <add value="openpage.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 

</configuration> 

(Jeśli nie próbować przekierować 401 błędy na poziomie ASP.NET, ja po prostu standard „nie upoważnia wiadomość” co nie jest efektem, który chcę dać moim użytkownikom.)

Jednak pojawia się błąd, którego nie rozumiem - za każdym razem, gdy serwer resetuje się, aplikacja przestaje działać. IIS po prostu zwraca 401 błędów, aż w przeglądarce pojawi się ręczna kontrola logowania, której nie można spełnić. (Nigdy nie chcę, aby moi użytkownicy byli przedstawiani z monitem logowania do przeglądarki)

Jednakże, jeśli zmienię sekcję httperrors po skonfigurowaniu aplikacji (przez edycję konfiguracji sieci lub aktualizację za pomocą interfejsu GUI serwera) usunięcie sekcji, uzyskanie dostępu do strony, a następnie dodanie sekcji do tyłu, aplikacja zacznie działać zgodnie z oczekiwaniami i będzie kontynuowana aż do ponownego uruchomienia serwera, w którym to momencie zacznie ponownie wyświetlać użytkownikom podręczne okienko logowania, które oni nie można rozwiązać.

1) Czy to jest prawidłowy sposób, aby zabezpieczyć aplikację z uwierzytelnianiem Windows (czy istnieje lepszy sposób skonfigurować katalog niedostępne jak w formach, ale nadal dostarczać niestandardowej strony błędu?)

2) Czy to efekt zintegrowanego rurociągu i dlaczego działa w ten sposób?

Odpowiedz

1

Próbujesz podać treść w komunikacie o błędzie dotyczącym transportu.

Formularze pozwala to zrobić, ponieważ składa się z rzeczy warstwy 7, takich jak 302 i 200. 401s są interpretowane przez przeglądarkę klienta jako "serwer nie podoba mi się moje poświadczenia, więc podnieś okno dialogowe, aby poprosić o nowe".

Strona uwierzytelniona generuje co najmniej 1 401 w celu uwierzytelnienia; to, że przeciążasz "błąd" w przypadku czegoś innego, prawdopodobnie jest źródłem problemu.

Nie jestem pewien, czy istnieje elegancki sposób robienia tego, co chcesz.

Powiązane problemy