IIS a nefunkční Forms Authentication

Tomáš Herceg       16. 11. 2009       ASP.NET/IIS       6770 zobrazení

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.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: IIS a nefunkční Forms Authentication

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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á.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: IIS a nefunkční Forms Authentication

Tak s tímto jsem se také setkal a musim říct,že už dlouho jsem se takhle nevztekal :D

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback