Аутентификация с помощью форм в приложениях

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

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

Я помещаю следующее в корневые приложения 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> установлены неправильно. Может кто-нибудь уточнить?

21.08.2008 02:33:48
8 ОТВЕТОВ
РЕШЕНИЕ

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

1
21.08.2008 03:53:15

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

<deny users="?"/>
0
21.08.2008 04:33:21

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

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

<deny users="?"/>
0
21.08.2008 02:56:51

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

Во-первых, задайте «Имя» Auth Forms для всех приложений. Это сделано с:

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

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

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

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

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

2
21.08.2008 03:54:25

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

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

Но это с помощью Microsoft Way

0
21.08.2008 03:31:17

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

Вот и все!

Итак, Summary, inorder todo this;

В корень 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>

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

8
21.08.2008 04:01:22
О, МОЙ БОГ! IsolateApps в элементе machineKey! спасибо спасибо, мои волосы теперь могут снова отрастить :)
Black Squirrel 26.01.2011 12:19:07

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

0
28.11.2008 16:07:53

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

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

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

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

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

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

0
16.01.2017 16:01:35