2012-12-05 16 views
5

Mam dwie części strony internetowej, nad którą pracuję: jedna używająca zwykłego uwierzytelniania formularzy, a druga używa uwierzytelniania opartego na HMAC. Oparty na formularzach działa tak samo normalnie (z wyjątkiem korzystania z niestandardowego dostawcy członkostwa).Inny tryb uwierzytelniania dla różnych obszarów

Najbardziej frustrujące jest to, że domyślnie, jeśli zdecyduje się na użycie uwierzytelniania formularzy, przekierowuje wszystkie 401 odpowiedzi na loginUrl określone w głównym pliku Web.config pod znacznikiem uwierzytelnienia. Aby wyłączyć tę funkcję dla części HMAC mojej witryny, utworzyłem osobny obszar, w którym te kontrolery są aktywne. Jednak niezależnie od tego, gdzie umieszczam znacznik <authentication mode="None"></authentication> (niezależnie od tego, czy znajduje się on w obszarze/widoki Web.config, Web.config Umieściłem w folderze obszaru lub pod znacznikiem lokalizacji w głównym pliku Web.config (robiąc to faktycznie powoduje błąd związany z tym znacznikiem, który nie należy do niego)) Nie mogę sprawić, aby to przestało przekierowywać wszystkie 401 do loginUrl.

Każda pomoc będzie bardzo ceniona, ponieważ sprawia, że ​​wyrywam sobie włosy.

Nawiasem mówiąc, to pytanie zostało zadane na różne sposoby co najmniej 2times bez odpowiedzi (wykonalnych). Podczas gdy moja koncentruje się na ustawianiu trybu uwierzytelniania na None, ich ogólnie koncentruje się na zmianie ról dla ścieżek (co moim zdaniem jest łatwiejsze do wykonania przy użyciu atrybutu [Authorize(Roles="role1,role2,role3")] dla każdej metody), co sprawia, że ​​moje pytanie jest trochę inne. Jeśli to niemożliwe, proszę, powiedz mi, abym mógł znaleźć lepszy sposób na zrobienie tego.

Odpowiedz

9

Numer authentication Element (ASP.NET Settings Schema) jest ważny tylko na poziomie aplikacji. Nie można mieć różnych trybów uwierzytelniania w tej samej aplikacji.

Można jednak podać numer location Element (ASP.NET Settings Schema) w określonym obszarze i określić w nim authorization Element (ASP.NET Settings Schema), który umożliwia anonimowym użytkownikom. Można również umieścić element autoryzacji w pliku web.config w katalogu podrzędnym aplikacji.

Aby użyć dwóch różnych schematów uwierzytelniania, musisz przekonwertować ten obszar na osobną aplikację. Może, jeśli chcesz, nadal być dzieckiem aplikacji macierzystej, ale są pewne zastrzeżenia. Jednym z zastrzeżeń jest oczywiście to, że stan sesji nie będzie dzielony między dwie aplikacje.

Zobacz także pytanie: Nested ASP.NET 'application' within IIS inheriting parent config values? i ASP.NET Configuration File Hierarchy and Inheritance.

+0

Czy to nadal ma miejsce w grudniu 2013 r. W wieku MVC5? – Kjensen

+2

@Kjensen, tak, jest to nieodłącznym ograniczeniem nowszego modelu rurociągu IIS. Jeśli musisz uwierzytelnić się z dwóch różnych źródeł, możesz użyć uwierzytelniania formularzy i napisać niestandardowy program MembershipProvider. Włączanie obu formularzy i uwierzytelnianie systemu Windows w tym samym czasie nie jest obsługiwane. – JamieSee

Powiązane problemy