Удостоверяване на формуляри в приложенията

Работя върху вътрешен уеб базиран инструмент за моята компания. Част от този инструмент е друго приложение (The Cruise Control Dashboard), което работи в своя собствена виртуална директория под моето основно приложение.

Исках да огранича достъпа до това вътрешно приложение, като настроя Forms Authentication в него и имам формуляр за влизане в основното приложение.

Поставих следното в root приложения 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› са зададени грешно. Може ли някой да изясни?


person FlySwat    schedule 21.08.2008    source източник


Отговори (8)


Може също да се наложи да поставите path="/" в маркера(ите) ‹forms, мисля. Съжалявам, мина известно време, откакто съм правил това

person David Wengier    schedule 21.08.2008

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

That was it!

И така, Резюме, за да направите това;

В root web.config добавете:

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

Това трябва да се направи, защото по подразбиране е „AutoGenerate,IsolateApps“.

Второ, трябва да наименувате бисквитката за удостоверяване на формуляра еднакво и в двете, направих всичко това в моя корен, използвайки маркера за местоположение:

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

Благодаря на всички за помощта. Това беше спънка.

person FlySwat    schedule 21.08.2008
comment
О, БОЖЕ МОЙ! Изолирайте приложенията в елемента machineKey! благодаря, благодаря, косата ми вече може да порасне :) - person hollystyles; 26.01.2011

FormsAuthentication криптира токените, които дава на потребителя, и по подразбиране криптира различни ключове за всяко приложение. За да накарате Forms Auth да работи в различни приложения, има няколко неща, които трябва да направите:

Първо, задайте „името“ на Forms Auth еднакво за всички приложения. Това се прави с:

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

Задайте "име" да бъде същото и в двете приложения web.configs.

Второ, трябва да кажете и на двете приложения да използват един и същ ключ при криптиране. Това е малко объркващо. Когато настройвах това, всичко, което трябваше да направя, беше да добавя следното към двете web.configs:

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

Според документите това е стойността по подразбиране, но не работи за мен, освен ако не съм я посочил.

person David Wengier    schedule 21.08.2008

Това не работи, все още позволява достъп на всички потребители (удостоверени или не).

Мисля, че дори можете да пропуснете маркера за разрешаване, тъй като е излишен. Просто:

<deny users="?"/>
person Mark Glorie    schedule 21.08.2008

Къде се намира този код Джонатан? Според моя опит имам контрол за влизане и в събитието OnAuthenticate бих задал Authenticated на false...

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

Но това се използва по Microsoft Way

person Mark Glorie    schedule 21.08.2008

вие позволявате всички неупълномощени. Може би търсите нещо подобно

<deny users="?"/>
person Darren Kopp    schedule 21.08.2008

Какво е разширението на файла за това приложение за круиз контрол? Ако това не е тип файл, който ASP.NET е регистриран да обработва (напр. jsp, java и т.н.), тогава ASP.NET няма да действа като механизъм за удостоверяване (на IIS 5 и 6). Например, за статични html файлове, освен ако не сте внедрили съпоставяне със заместващи знаци, IIS извършва цялото удостоверяване и оторизация и обслужва файла, без да включва разширението ASP.NET isapi. IIS7 може да използва новия интегриран тръбопроводен режим, за да прихваща всички заявки. За IIS6 ще искате да погледнете статията на Скот Гу по въпроса.

person MatthewMartin    schedule 28.11.2008

Нито едно от горните предложения не ми помогна. Оказва се в основния набор web.config:

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

и се уверете, че както коренното, така и дъщерното приложение имат в system.web

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

което изключва IsolateApps по подразбиране.

Тогава всичко просто работеше!

person Kevin Pluck    schedule 16.01.2017