Vývojářský blog Tomáše Hercega

Tisk článku Tisk článku

IIS a nefunkční Forms Authentication

[Zpět na blog]

Datum: 16. 11. 2009 0:42       Autor: Tomáš Herceg       Zobrazeno: 1887x

Kategorie: ASP.NET


Až se zase jednou budete divit, vztekat a nadávat, proč na lokálu vše funguje tak, jak má, a v momentě, kdy svoji ASP.NET aplikaci nahrajete na IISku a nasadíte na ostrý web, aplikace vás nenechá přihlásit a neustále vás přesměrovává na Login stránku, vězte, že řešení je jednoduché.

Problém nastane, kdy na jednu doménu 2. řádu nasadíte dvě aplikace, které se přihlašují přes Forms Authentication. Ve standardním nastavení se totiž snaží sdílet své autentizační tickety, což se jim ovšem pochopitelně nepodaří. Kdyby to ASP.NET alespoň žbleptlo, ale ne, prostě pořád tupě přesměrovává na login stránku a i když zadáváte správné jméno a heslo, dál vás to nepustí.

Stačí ve web.configu přidat element forms dovnitř authentication a nastavit mu atribut name u každé aplikace na jinou hodnotu. Pak se autentizační tickety nesdílejí a na různých subdoménách můžete provozovat různé aplikace.

<authentication mode="Forms">
    <forms name="nakupy.herceg.cz" loginUrl="Login.aspx" timeout="100000" slidingExpiration="true" />
#lt;/authentication>

Nejvtipnější je na tom to, že dokud je na serveru jen jedna aplikace, která autentizaci využívá, vše funguje. Jakmile nasadíte druhou, přestane to jít. A ještě pikantnější je, že jsem to nejmíň 5x v životě řešil, akorát vždycky zapomenu, čím to bylo. Proto si to píšu na blog a až zase někdy budu psát do vyhledávače něco jako "IIS Forms Authentication login redirect” nebo “Forms Authentication problem IIS”, najde to tenhle blog post.


> Na začátek

 

Hodnocení:

Hlasů: 3
Zvolte své hodnocení

Tomáš Herceg

Jsem hlavním softwarovým architektem ve společnosti Riganti. Mám dlouholeté zkušenosti s technologiemi ASP.NET, Silverlight, WPF a XNA. Působím též jako lektor ve společnosti Gopas a již třetím rokem jsem držitelem ocenění Microsoft Most Valuable Professional.

Podpořte vznik dalších článků
RSS Feed RSS Feed

Diskuse

1 

Souhlas

Datum: 16.11.2009 13:22
Autor: neregistrovaný (213.226.198.106)
Hodnocení autora: není
Příspěvků: 0
Tak s tímto jsem se také setkal a musim říct,že už dlouho jsem se takhle nevztekal :D
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

...ale kam s ním ?

Datum: 18.11.2009 17:35
Autor: neregistrovaný (86.49.11.25)
Hodnocení autora: není
Příspěvků: 0
Tenhle web je normální bomba pro ty co dělají v ASPNetu. Trvalo mi asi 3 hodiny než jsem se rozhodl přesně tenhle problém "vyGooglovat". Což o to rada je to dobrá, ale kam stím druhým zápisem. Jsem asi málo chytrej, ale mě to říká, že v tom tagu může být jen jeden zápis. Konkrétně se snažím dodělat na stejný doméně druhou aplikaci a nevím kam s tím.

   <authentication mode="Forms">
      <forms name="vysehrad2000.com/bonus/" loginUrl="bon369.aspx" timeout="100000" slidingExpiration="true" />
       <forms name="vysehrad2000.com/beseda/" loginUrl="Default.aspx" timeout="100000" slidingExpiration="true" />
  </authentication>
 

Můžete mi prosím někdo poradit kam se zápisem ?

Díky Milan
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: ...ale kam s ním ?

Datum: 18.11.2009 18:09
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Každá aplikace může mít jen jeden element forms, v konfiguráku každé webové aplikace musíte definovat příslušnou login stránku. Anebo to dát do složky, které se to bezprostředně týká.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: ...ale kam s ním ?

Datum: 19.11.2009 9:21
Autor: Milan Nehasil
Hodnocení autora: 3
Příspěvků: 3
Tak já nevím, asi v tom hledám něco složitějšího, ale nedaří se. Na zkoušku jsem si udělal stránku Default.aspx, ve který mám tabulku GridView navázanou na databázi na internetu. Pokud to spustím v lokálu, tak se data v tabulce zobrazí - pokud to dám na server tak to hodí chybu. Prostě klasika. Na serveru je už jedna aplikace v adresáři Bonus, ale web.config od ní je v rootu, ne přímo v adresáři Bonus. Když do adresáře Beseda nahraju druhou aplikaci a dám web.config od této aplikace taky do adresáře Beseda ohlásí to chybu. Každou aplikací se připojuju do jiný databáze na dvou různých serverech.

Chybová zpráva analýzy: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level.  This error can be caused by a virtual directory not being configured as an application in IIS.

Řádek 55:             ASP.NET to identify an incoming user. 
Řádek 56:         -->
Řádek 57:       <authentication mode="Forms">
Řádek 58:         <forms name="vysehrad2000.com/beseda/" loginUrl="Default.aspx" timeout="100000" slidingExpiration="true" />
Řádek 59:       </authentication>
 
Asi jsem nepochopil kde má být ten druhý web.config. Můžete mi prosím ještě poradit ?
Díky za trpělivost :-)

Milano
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: ...ale kam s ním ?

Datum: 19.11.2009 16:42
Autor: Jakub Němec
Hodnocení autora: 88
Příspěvků: 151
Zkuste zkontrolovat aplikaci v IIS,nastavení Virtual Path.
Ve <forms name="" .. by mělo být jméno web app,tz. ".beseda".Zkuste a dejte vědět.
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: ...ale kam s ním ?

Datum: 20.11.2009 16:40
Autor: Milan Nehasil
Hodnocení autora: 3
Příspěvků: 3
Tak to bude problém, já to mám na serveru na webhostingu a nevím jestli to znich vyrazím. Já už si i myslím, že je to tím, že je to dělaný ve Web Developeru 2008, ale to je samozřejmě hloupost.

Dal jsem to i na jiný server kde je ASPX verze 3.5 , ale mě nechodí ani <customErrors mode="Off"/> , pořád mi to říká, že mám upravit web.config a zapsat tam právě ten tag.

Díky Milan
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
1 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.