SmackDatCode Ответов: 1

Проблема аутентификации формы с исключением страниц


Привет, я использовал аутентификацию форм для своего каталога администратора, исключил свои корневые веб-формы и загрузил их на хост, теперь всякий раз, когда я звоню в домен, он хочет, чтобы я сначала прошел аутентификацию. но если я, например, вызову Domain/index.aspx, это сработает. я не знаю, как исправить эту проблему.

Что я уже пробовал:

<system.web>
    <machineKey validationKey="74222414ADCEF7AD77EBDDEEF79D2ED08F23BBA5BE82154DF47135ACF39F60F29CFA095BE6B707799DF70A53BFA4B43D336789D552DBC4D9542C6F97DFC12256" decryptionKey="25D197E2D9E761C61CAB460F3F67936FF569394BDB7C48C6B02DB2C71B306EA0" validation="SHA1" decryption="AES" />
    <pages validateRequest="false" />
    <!--<customErrors mode="On">
        <error statusCode="404" redirect="~/error/default.html" />
      </customErrors>-->
    <authentication mode="Forms">
      <forms name="MyAppCookie" loginUrl="~/Admin/Login.aspx" protection="All" timeout="120" defaultUrl="~/Admin/Default.aspx" />
    </authentication>
    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>
  </system.web>
  <location path="Index.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

  <location path="Contactus.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

  <location path="Blogdetails.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="Blog.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="Aboutus.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

1 Ответов

Рейтинг:
5

Richard Deeming

Посмотрите на свою конфигурацию еще раз. Вы сказали ему, что каждый URL-адрес в вашем приложении кроме Index.aspx, Contactus.aspx, Blogdetails.aspx, Blog.aspx и Aboutus.aspx требовать проверки подлинности.

Когда вы запрашиваете корень вашего приложения, URL-адрес не содержит ни одной из этих страниц, поэтому запрос требует аутентификации.

Измените конфигурацию и запретите анонимный доступ к страницам и папкам, которые вы хотите защитить.

<system.web>
    <machineKey ... />
    <pages validateRequest="false" />
    <authentication mode="Forms">
      <forms name="MyAppCookie" loginUrl="~/Admin/Login.aspx" protection="All" timeout="120" defaultUrl="~/Admin/Default.aspx" />
    </authentication>
    
    <!-- NB: Remove the <authorization> element here... -->
</system.web>

<!-- Now deny anonymous access to any pages / folders you want to protect: -->
<location path="admin">
    <system.web>
        <authorization>
            <deny users="?" />
            <allow users="*" />
        </authorization>
    </system.web>
</location>

Для папок вы также можете создать web.config файл в папке с правилами авторизации, без использования элемента location:
<!-- /admin/web.config -->
<configuration>
    <system.web>
        <authorization>
            <deny users="?" />
            <allow users="*" />
        </authorization>
    </system.web>
</configuration>


NB: Вы должны никогда разместите свой <machineKey> подробности на публичном форуме. Это частные ключи шифрования, которые позволят любому взломать ваш сайт. Вы должны сменить эти ключи как можно скорее!


SmackDatCode

О, Спасибо! И конечно, насчет Мачиеки.
Но у меня есть один вопрос. как я могу обратиться к своему корню в location path? неужели все идет именно так?
путь к местоположению= " httpdoc"

Richard Deeming

Нет. Корень - это все, что есть. снаружи в <location> элемент. Вы настраиваете конфигурацию для корня, а затем используете <location> элементы для переопределения его для определенных страниц или папок.

SmackDatCode

Приветствия. я использовал второй вариант, который вы упомянули выше,но теперь я продолжаю получать эту ошибку. основная проблема решена, но у меня нет доступа к моей папке администратора, она всегда выдает мне ошибку 500.
Использование раздела, зарегистрированного как allowDefinition='MachineToApplication' за пределами уровня приложения, является ошибкой. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS

я использовал второй webconfig в своей папке администратора с аутентификацией для его форм.

Richard Deeming

То <authentication> раздел должен быть определен в web.config файл в корне вашего приложения.

Вам нужно только определить <authorization> элемент в web.config файл в папке администратора.

SmackDatCode

это сработало, спасибо на миллион! :)