/ / Włączanie uwierzytelniania formularzy dla wielu podfolderów w witrynie - członkostwo asp.net

Włączanie FormsAuthentication dla wielu podfolderów w serwisie - członkostwo asp.net

Próbujemy wdrożyć formularze Uwierzytelnianienaszą stronę, ale w scenariuszu, w którym nie byliśmy jeszcze w stanie znaleźć rozwiązania - innego niż stworzenie własnego HttpModule i samodzielna logika - więc pomyślałem, że rzuciłem pytanie, aby sprawdzić, czy to było rzeczywiście jedyne rozwiązanie.

Chcielibyśmy używać formularzy Uwierzytelnianie na górzeniestandardowi dostawcy członkostwa, ale chcieliby użyć innego dostawcy dla różnych folderów. Nasza strona dzieli te sekcje na podfoldery (np .: ~ / Admin, ~ / GoldCustomer, ~ / SilverCustomer, ~ / BronzeCustomer), dlatego chcielibyśmy używać różnych dostawców członkostwa dla każdej sekcji / podfolderu. wdrożyliśmy nasz plik web.config, taki jak:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="Admin">
<system.web>
<authentication mode="Forms">
<forms name="AdminAuth" loginUrl="~/AdminLogin.aspx" />
</authentication>
<membership defaultProvider="AdminProvider" >
<providers >
<add connectionStringName="ConnString" name="AdminProvider" type="Assembly.AdminMembershipProvider" ... />
</providers>
</membership>
</system.web>
</location>
<location path="GoldCustomer">
<system.web>
<authentication mode="Forms">
<forms name="GoldCustomerAuth" loginUrl="~/GoldCustomerLogin.aspx" />
</authentication>
<membership defaultProvider="GoldCustomerProvider" >
<providers >
<add connectionStringName="ConnString" name="GoldCustomerProvider" type="Assembly.GoldCustomerMembershipProvider" ...="" />
</providers>
</membership>
</system.web>
</location>
<system.web>
<compilation debug="true" />
<authentication mode="Forms" />
</system.web>
</configuration>

Wykonanie tego powoduje błąd w czasie wykonywania:

Błędem jest użycie sekcji zarejestrowanej jakoallowDefinition = "MachineToApplication" poza poziomem aplikacji. Ten błąd może być spowodowany brakiem konfiguracji katalogu wirtualnego jako aplikacji w IIS.

Line 11:   <location path="Admin">
Line 12:     <system.web>
Line 13:       <authentication mode="Forms">
Line 14:         <forms name="FormsAdmin" loginUrl="~/login.aspx" />
Line 15:       </authentication>

Wydaje się, że jedynym sposobem na osiągnięcie tego„próbujemy użyć niestandardowego modułu HttpModule - lub zmienić nasze podejście (np. dzielenie folderów na różne aplikacje internetowe w IIS). Czy to prawda, czy coś pomijam? Czy są też inne alternatywy, których nie znam?

Dzięki za pomoc!

Odpowiedzi:

1 dla odpowiedzi № 1

Po pierwsze, uważam, że bezpieczeństwo oparte na rolach ma sens dla twojej aplikacji, jeśli masz kontrolę nad bazami danych. Ale jeśli nie możesz tego zmienić, jest to niemożliwe.

Alternatywnym rozwiązaniem mogą być formularze logowania do bramy, które przekierowują użytkownika do konkretnego formularza logowania na podstawie folderu ReturnUrl kwerenda zmiennej i ten formularz będzie używał dostawcy, którego chce zweryfikować użytkownika. Następnie używa FormsAuthentication.RedirectFromLoginPage ustawić uwierzytelniający plik cookie i przekierować na poprzednią stronę. Możesz ustawić role i używać zabezpieczeń opartych na rolach do kontrolowania dostępu do każdego folderu za pomocą <authorization> wprowadź tag web.config.


0 dla odpowiedzi nr 2

Nie jestem pewien, co próbujesz zrobić, ale co powiesz na role dla każdego z tych typów klientów? Ogranicz dostęp według roli dla każdego podfoldera, ale nadal masz 1 dostawcę członkostwa i 1 dostawcę roli.