Вопрос

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

Я хотел ограничить доступ к этому внутреннему приложению, настроив в нем проверку подлинности Forms и установив форму входа в корневом приложении.

Я поместил следующее в корневой файл applications web.config:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
        <forms loginUrl="/default.aspx" timeout="5000"/>
    </authentication>
    <authorization>
      <allow users="?"/>
      <deny users="?"/>
    </authorization>        
  </system.web>    
</location>

Однако проверка подлинности в формах, похоже, не работает, она не перенаправляет обратно на страницу входа в систему, когда я получаю доступ к этому приложению напрямую.

У меня такое чувство, что у меня неправильно установлены теги <allow> и <deny> .Может кто-нибудь пояснить?

Это было полезно?

Решение

Возможно, вам также потребуется указать path="/" в Извини, давненько я этим не занимался

Другие советы

Возможно, вам также потребуется указать path="/" в

Вот и все!

Итак, Краткое изложение, для того, чтобы сделать это;

В корневом web.config добавьте:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Это необходимо сделать, потому что по умолчанию это "AutoGenerate, IsolateApps".

Во-вторых, вы должны назвать форму Auth cookie одинаковой в обоих, я сделал все это в своем корневом каталоге, используя тег location:

<authentication mode="Forms">
   <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

Наконец-то:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
      <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>      
  </system.web>    
</location>

Спасибо всем за вашу помощь.Это был тупик.

FormsAuthentication шифрует токены, которые он предоставляет пользователю, и по умолчанию он шифрует ключи, разные для каждого приложения.Чтобы заставить Forms Auth работать в разных приложениях, вам нужно сделать несколько вещей:

Во-первых, установите для Форм Auth "name" одинаковое "имя" во всех приложениях.Это делается с помощью:

<authentication mode="Forms">  
    <forms name="{name}" path="/" ...>
</authentication>

Установите "имя" одинаковым в обоих приложениях web.configs.

Во-вторых, вам нужно указать обоим приложениям использовать один и тот же ключ при шифровании.Это немного сбивает с толку.Когда я настраивал это, все, что мне нужно было сделать, это добавить следующее в оба web.config:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Согласно документам, это значение по умолчанию, но у меня оно не работало, пока я его не указал.

Это не работает, оно по-прежнему разрешает доступ всем пользователям (прошедшим проверку подлинности или нет).

Я бы подумал, что вы могли бы даже опустить тег allow, поскольку он избыточен.Просто:

<deny users="?"/>

Где находится этот код, Джонатан?По моему опыту, у меня есть элемент управления входом в систему, и в событии OnAuthenticate я бы установил Authenticated равным false...

If CustomAuthenticate(Login1.UserName, Login1.Password) Then
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
    e.Authenticated = False
End If

Но это использование Путь Microsoft

вы разрешаете все, что не проходит проверку подлинности.Возможно, вы ищете что-то вроде этого

<deny users="?"/>

Каково расширение файла для этого приложения круиз-контроля?Если это не тип файла, который ASP.NET зарегистрирован для обработки (напримерjsp, Java и т.д.), то ASP.NET не будет действовать как механизм аутентификации (в IIS 5 и 6).Например, для статических HTML-файлов, если у вас не реализовано сопоставление подстановочных знаков, IIS выполняет всю проверку подлинности и авторизацию и обслуживает файл без использования расширения ASP.NET isapi.IIS7 может использовать новый режим интегрированного конвейера для перехвата всех запросов.Для IIS6 вам, вероятно, захочется взглянуть на Статья Скотта Гу по этому вопросу.

Ни одно из вышеперечисленных предложений не сработало для меня.Оказывается, в корневом наборе web.config:

<forms loginUrl="/pages/login.aspx" enableCrossAppRedirects="true"...

и убедитесь, что и корневое, и дочернее приложения есть в system.web

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1"/>

который отключает IsolateApps по умолчанию.

Тогда все просто заработало!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top