Как проверить, что запрашиваемый путь (URL) имеет правила аутентификации в ASP.NET? - PullRequest
2 голосов
/ 09 октября 2011

В моем решении ASP.NET есть иерархия папок, например:

enter image description here

Все в папке Reseller должно пройти проверку подлинности и считается защищенным ресурсом. Но все, что находится в папке Services, является общедоступным, и нет необходимости проверять подлинность любого запроса, поступающего для веб-службы ProductServices.asmx.

Теперь я хочу подключиться к AuthenticateRequest конвейера процесса запроса, и там, перед тем, как пользователь будет аутентифицирован, я хочу увидеть, является ли запрос открытым или безопасным путем. Я знаю, что могу использовать UrlAuthorizationModule.CheckUrlAccessForPrincipal, и на самом деле я задал этот вопрос в другой вопрос . Но UrlAuthorizationModule.CheckUrlAccessForPrincipal - это метод, который можно использовать сразу после аутентификации запроса. Однако перед любой аутентификацией я хочу знать, является ли запрошенный путь безопасным или нет. Другими словами, есть ли какой-либо элемент authentication, определенный для запрошенного пути, где-либо в его иерархии папок в любом файле web.config или нет.

Псевдокод того, что я хочу, может выглядеть примерно так:

UrlAuthorizationModule.IsRequestedPathSecure(Request.Url.AbsolutePath)

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 09 октября 2011

Вы можете использовать метод CheckUrlAccessForPrincipal (как вы упомянули), но используйте GenericPrincipal, представляющий анонимного пользователя, например:

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    IIdentity identity = new GenericIdentity(string.Empty, string.Empty);
    IPrincipal principal = new GenericPrincipal(identity, new string[] { });

    bool hasAccess = UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.Path, principal, "GET");

    if(!hasAccess)
    {
        //Anonymous access not permitted to the current URL.
    }
}
0 голосов
/ 09 октября 2011

Добавьте файл web.config для посредника и запишите в него следующий код

<?xml version="1.0"?>
    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
      <system.web>
        <authorization>
          <allow roles="ResellerUser,ResellerAdmin" />
          <deny users="*"/>
        </authorization>
  </system.web>
</configuration>

, а также добавьте файл web.config в папку Service и введите в нее следующий код

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings>
  </appSettings>
      <system.web>
        <pages theme="">
        </pages>
 <authorization>
  <allow roles="ResellerUser, ResellerAdmin" />
  <deny users="*" />
</authorization>

Примечание к Page theme = "" необходимо.

0 голосов
/ 09 октября 2011

Не уверен, поможет ли это, но вы можете запретить / предоставить доступ к скрытым ресурсам, используя location элемент web.config, см. КАК: контролировать права доступа в приложении ASP.NET для описания.Это дает вам возможность предоставления доступа к папке или aspx / asmx.IIS будет возвращать код ошибки HTTP 403 для запрещенных мест и не обрабатывать запросы к ним, если у пользователей нет разрешений

...