Czasami się zdarza, że podczas tworzenia aplikacji MVC musimy dodać jakiś moduł lub usunąć jeden z istniejących. Dla przykładu chcemy zacząć wykorzystywać Claims w aplikacji webowej, w tym celu musimy dodać następujący kod do naszego web.config:

<system.webServer>
	<modules>
		<remove name="FormsAuthentication" />
		<add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
		<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
	</modules>
</system.webServer>

Następnie robimy deployment package albo jakikolwiek inny rodzaj deployu, odpalamy witrynę i dostajemy:

IIS Error - 403 Forbidden
IIS Error – 403 Forbidden

Jeżeli zrobiliśmy wszystko tak jak powyżej to sprawa jest prosta, w tagu konfiguracyjnym modules brakuje atrybutu runAllManagedModulesForAllRequests z wartością ustawioną na true. Teraz, strona powinna już nam śmigać :)

<system.webServer>
	<modules runAllManagedModulesForAllRequests="true">
		<remove name="FormsAuthentication" />
		<add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
		<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
	</modules>
</system.webServer>

Oczywiście w innych przypadkach (jak i w takich kiedy ustawienie na true nie pomaga), może to być winna AppPool, uprawnień, ustawień autentykacji w IIS czy też ogólnego problemu z dllkami. Ale to już kompletnie inna sprawa ;)

2 KOMENTARZE

  1. Kuba, właśnie o to chodzi, że błąd w delpoymencie na test powinien zabezpieczać przed problemami z kolejnymi środowiskami. Proponujesz rozwiązanie, które wróci do autora bumerangiem w najgorszym z możliwych momentów (czyt. potrzeba wdrożenia na prod).

  2. **@El_Topo**

    Troche nie rozumiem co tutaj masz na mysli :) MVC nie bedzie Ci dzialac jezeli masz atrybut `runAllManagedModulesForAllRequests` ustawiony na false lub Ci go brakuje.

    To ze smiga to na IIS Express jest dosc dziwne, ale na zadnym serwerze na ktorym robisz dep Ci to nie zadziala. Stad tez rozwiazanie problemu z 403. Ogolnie jest to blad kodu, o ktorym sie dowiadujesz jak robisz dep na dev/test/staging etc.

    Dojsc zas do tego jest cholernie ciezko gdyz Twoja aplikacja nawet nie jest uruchamiana, w event logu tez nic nie ma. Po prostu dostajesz 403 – Forbidden i tyle a wszystko przez blad w Web.config.

Comments are closed.