Формы аутентификации в приложениях

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

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

Я поместил в корневые приложения 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>

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

Такое ощущение, что у меня и теги установлены неправильно. Может кто уточнить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
3 400
7

Ответы 7

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

<deny users = "?"/>

That does not work, it still allows all users, (Authenticated or not) to access.

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

<deny users = "?"/>

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

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

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

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

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

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

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

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

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

Но это с использованием Microsoft Way

You might also need to put path = "/" in the

Вот и все!

Итак, Резюме, чтобы сделать это;

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

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

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

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

<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>

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

МОЙ БОГ! IsolateApps в элементе machineKey! спасибо спасибо, мои волосы теперь могут отрасти :)

hollystyles 26.01.2011 15:19

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

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

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

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

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

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

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

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