Проверка подлинности форм игнорируется в виртуальном приложении - PullRequest
4 голосов
/ 15 марта 2010

У меня есть сайт администратора, настроенный как виртуальное приложение на другом сайте.

Я бы хотел, чтобы посетители подкаталога (виртуального приложения) запрашивались для ввода учетных данных с использованием той же проверки подлинности с помощью форм, установленной на главном родительском сайте

Перепробовал все что угодно, но не смог заставить его работать, включая

Удаление всех разделов <authentication mode="Forms">, <authorization>, <membership> и <roles> из виртуального приложения web.config

Копирование тех же секций <authentication mode="Forms">, <authorization>, <membership> и <roles> из родительского раздела в виртуальное приложение web.config

Использование виртуального каталога вместо виртуального приложения

Но у меня никогда не запрашивают учетные данные

Кто-нибудь знает, как получить эту настройку?

спасибо

UPDATE:

Теперь он получил возможность наследовать разрешения от родителя, удалив имя приложения в IIS (чтобы сделать его виртуальным каталогом, а не виртуальным приложением)

Тем не менее, это винты всех путей на сайте администратора

например. Я получаю следующую ошибку

Файл '/Site.master' не существует.

Так я должен использовать виртуальный каталог (который, кажется, наследует аутентификацию от родителя)?

Или виртуальное приложение (которое в настоящее время не наследует auth от родительского, но имеет правильные относительные пути)?

Вот родительский конфиг

<membership defaultProvider="SqlServerMembershipProvider">
            <providers>
                <add connectionStringName="xxxxxxxx" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="SqlServerMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </providers>
        </membership>
        <roleManager enabled="true" defaultProvider="SqlServerRoleProvider">
            <providers>
                <add connectionStringName="xxxxxxx" applicationName="/" name="SqlServerRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </providers>
        </roleManager>

        <authentication mode="Forms">
            <forms name=".EPiServerLogin" loginUrl="login.aspx" timeout="120"/>
        </authentication>
        <authorization>
            <deny users="?"/>
        </authorization>

Ответы [ 3 ]

2 голосов
/ 16 марта 2010

Мне нужно было использовать решение для единого входа, как описано здесь

http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

Суть в том, что каждый сайт должен использовать один и тот же ключ шифрования для значений cookie. Поэтому этот элемент machineKey необходимо добавить на каждый сайт, участвующий в системе единого входа

1 голос
/ 15 марта 2010

Как вы настроили авторизацию ?

Кроме того, я полагаю, вы еще не прошли проверку подлинности на родительском сайте?

В подкаталоге admin у вас должно быть что-то вроде следующего в вашем web.config (очевидно, у вас также может быть больше информации):

<configuration>
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
</configuration>

Это запретит всем анонимным пользователям, но разрешит доступ всем аутентифицированным пользователям. Вы можете легко расширить это, если используете поставщика ролей для разрешения только определенных ролей:

      <allow roles="Admin" />
      <deny users="*" />

Обратите внимание, что вам нужно включить параметр «Запретить всех пользователей», так как по умолчанию разрешены все пользователи. Авторизация работает «сверху вниз» в том смысле, что она начинается сверху списка, и как только она находит совпадение, она прекращает обработку, поэтому, если пользователь играет роль «Администратор», он не попадает в «Запретить». Правило всех пользователей.

Вы также можете настроить это в корневом web.config, используя элемент <location> .

Ответы на комментарии

А ваша аутентификация / авторизация все работает на родительском сайте?

Не могли бы вы отредактировать свой вопрос, чтобы включить (дезинфицированные) разделы web.config, которые вы пробовали, чтобы мы могли увидеть, нет ли чего-то очевидного упущенного - например, если вы используете роли для блокировки области администратора, вы включили это (<roleManager enabled="true">, по умолчанию false).

0 голосов
/ 16 марта 2010

Мы делаем то, что вы пытаетесь делать довольно часто здесь.

Мы делаем это следующим образом: корневой уровень - это виртуальное приложение, оно содержит мастер web.config и global.ascx. У нас есть нормальная папка «Admin» внутри. Внутри этого у нас есть небольшой web.config, он содержит только <authorization> XML-информацию. Вам понадобится страница входа где-нибудь, либо в корневую папку, либо в папку администратора.

Я был немного озадачен вашим сообщением о том, задействованы ли три приложения / каталоги (приложение, родительское приложение, администратор приложения) или только два (приложение и его администратор). Я делаю критическое предположение, что это два. Если у вас есть три, это будет немного больше работы, чтобы запустить эту вещь.

alt text

...