Сведения о вопросе

Ислам

03:03, 18th August, 2020

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

Просмотров: 603   Ответов: 8

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

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

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



  Сведения об ответе

lool

21:16, 14th August, 2020

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

Вот оно что!

Итак, резюме, в порядке todo это;

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

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


  Сведения об ответе

fo_I_K

17:46, 15th August, 2020

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

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

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

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

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

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

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


  Сведения об ответе

DINO

01:22, 20th August, 2020

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


  Сведения об ответе

LAST

09:30, 22nd August, 2020

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

<deny users="?"/>


  Сведения об ответе

nYU

18:20, 18th August, 2020

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

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

<deny users="?"/>


  Сведения об ответе

lool

00:22, 17th August, 2020

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

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

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


  Сведения об ответе

PROGA

04:26, 23rd August, 2020

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


  Сведения об ответе

SKY

16:09, 15th August, 2020

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

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

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться