Использование проверки подлинности форм / авторизации с переписанными URL - PullRequest
3 голосов
/ 02 июня 2009

Я делаю быстрый тест песочницы с некоторыми переписанными URL-адресами (пример взят из блога Скотта Гатри) и Аутентификацией / авторизацией с помощью форм.

У меня очень простая настройка.

~/View/(\d{1,6})      =>      ~/Public/View.aspx?ContentID=$1

И

~/Buy/(\d{1,6})       =>      ~/Private/Purchase.aspx?ContentID=$1

Я подтвердил, что перезапись URL работает, перейдя к каждому из следующих пунктов отдельно

Затем я включил аутентификацию / авторизацию с помощью форм для этих двух каталогов в Web.Config. Настройте следующим образом

  <location path="Private">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="Public">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location> 

Это прекрасно работает, когда я просматриваю 2 исходных URL (.aspx) но не запускается вообще, когда я перехожу к URL Перезаписанные версии.

Я пытался добавить <location> разделы для Buy отдельно, но это все равно не может вызвать срабатывание модуля авторизации / аутентификации.

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

    <LookFor>~/Buy/(\d{1,6})\.aspx</LookFor>

т.е. заставить переписанную версию иметь ASPX в конце, но это только кажется уродливым. Есть ли способ заставить обработчики аутентификации запускаться для любого типа URL независимо от расширения (или его отсутствия)

Ответы [ 4 ]

2 голосов
/ 23 июля 2009

Чтобы использовать встроенную аутентификацию, вам нужно будет решить, хотите ли вы проходить аутентификацию, основываясь на исходных «сырых» или переписанных URL-адресах. Похоже, что переписывающий URL-адрес, который вы используете, подключен к событию после того, как аутентификация уже была выполнена, поэтому соблюдаются только правила папки «Public» и «Private». Если вы хотите аутентифицироваться на основе переписанных URL-адресов, вам придется использовать перезаписывающее устройство, которое подключается к более раннему событию (например, BeginRequest), а также обновлять ваш web.config с переписанными URL-адресами.

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

Пожалуйста, смотрите эту статью для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/ms972974.aspx

Надеюсь, это поможет.

0 голосов
/ 23 апреля 2014

попробуйте включить аутентификацию форм и авторизацию по всем запросам. По умолчанию он включен только для запросов asp.net, таких как .aspx. Может быть сделано в IIS (7) или непосредственно в web.config в разделе веб-сервера / модулей

<system.webServer>
   <modules>
        <remove name="FormsAuthentication" />
        <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition=""/>
        <remove name="UrlAuthorization" />
        <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="" />
   </modules>
</system.webServer>
0 голосов
/ 26 августа 2009

Не ясно, какую библиотеку переписывания URL вы используете, но судя по всему, я думаю, что это, вероятно, urlrewriter.net, однако я не вижу никаких тегов?

0 голосов
/ 19 августа 2009

В ASP.NET 4.0 (и я считаю, что это в 3.5 SP1), есть новая функция маршрутизации. Преимущества использования этой функции маршрутизации состоят в том, что она теперь поддерживается непосредственно внутри ASP.NET, и поэтому вы можете указать, что при выполнении маршрута он должен учитывать параметры авторизации для фактического файла .ASPX.

Поэтому я рекомендую вам выяснить, можете ли вы вместо этого реализовать эту функцию маршрутизации.

...