Как предоставить анонимный доступ к URL-адресу с помощью FormsAuthentication? - PullRequest
21 голосов
/ 30 августа 2009

По большей части, мое веб-приложение требует проверки подлинности, чтобы что-либо сделать. Есть несколько страниц, а именно домашняя страница, к которой я хотел бы, чтобы люди имели доступ без аутентификации.

В частности, я хотел бы разрешить анонимный доступ к этим URL:

/home 
/default.aspx

Я использую asp.net MVC и FormsAuthentication. Оба URL указывают на одно и то же представление:

/home/index.aspx

Вот моя текущая конфигурация в web.config.

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />      
</authentication>
<authorization>           
  <deny users="?" />      
</authorization>

Читая документацию по тегу авторизации, он говорит: «Настраивает авторизацию для веб-приложения, управляя доступом клиентов к ресурсам URL». Похоже, я должен иметь возможность использовать тег авторизации, чтобы указать URL-адрес и разрешить доступ.

Что-то вроде:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />      
</authentication>

<authorization>           
  <deny users="?" />      
</authorization>

<authorization url="/default.aspx">           
  <allow users="?" />      
</authorization>

<authorization url="/home">           
  <allow users="?" />      
</authorization>

1 Ответ

41 голосов
/ 03 сентября 2009

Ненавижу отвечать на свой вопрос, но так как я все выяснил, я решил поделиться своими знаниями.

Используйте тег местоположения и разместите теги allow и deny в правильном порядке.

Тег местоположения можно использовать для настройки определенного ресурса URL. В моем случае я хотел настроить несколько URL-адресов и папок специально.

Сначала это не сработало, потому что у меня не было разрешения / отказа в правильном порядке. Согласно MSDN, «модуль авторизации предоставляет или запрещает доступ к ресурсу URL в зависимости от того, является ли первое найденное правило доступа разрешающим или запрещающим».

В моем случае мне сначала нужно было разместить все свои общедоступные материалы (default.aspx, home, styles, images, scripts), а затем я отказался от всего остального. Я пропустил путь на последнем теге местоположения. Это делает его применимым ко всем файлам и подпапкам.

Конечный результат, пользователь может перейти на домашнюю страницу, вытащить изображения и стили, но для всего остального необходимо войти в систему.

Вот мой файл веб-конфигурации сейчас:

<!--AUTHORIZATION AND AUTHENTICATION RULES-->
  <location path="default.aspx">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="Home">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="Styles">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="Scripts">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="images">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location allowOverride="true">
    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" />
      </authentication>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

  <!--END AUTHORIZATION AND AUTHENTICATION RULES-->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...