Используя авторизацию на основе политик в ASP.NET Core 2.1, как перенаправить пользователя, если требование не выполнено? - PullRequest
0 голосов
/ 18 января 2019

В ASP.NET Core 2 Microsoft довольно настойчиво заявляет, что все задачи авторизации выполняются с использованием политик и требований . Используя самый простой пример, который я могу придумать:

public class Startup
{
  public void ConfigureServices(IServiceCollection services)
  {
    services.AddAuthorization(options => 
    {
      options.AddPolicy("MyPolicy", p => p.RequireAssertion(a => false));
    });
  }
}

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

public class HomeController : HomeController
{
  public IActionResult Allow() => View();

  [Authorize("MyPolicy")]
  public IActionResult Deny() => View();
}

Этот вид работает как ожидалось. Мне действительно отказано в доступе ко второму действию, но я перенаправлен на https://localhost:44331/Account/AccessDenied?ReturnUrl=%2FHome%2FDeny.

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

Как мне указать, куда следует перенаправлять пользователя, когда требование не выполнено? Кроме того, можно ли перенаправить в разные места в зависимости от политики / требования?

UPDATE: Просто чтобы прояснить ситуацию, я использую ASP.NET Core Identity в своем приложении. И ответом на первую часть моего вопроса является установка свойства AccessDeniedPath при настройке файла cookie приложения:

services.ConfigureApplicationCookie(o =>
{
    o.AccessDeniedPath = "/Some/Path";
});

Но это означает, что я застрял, перенаправляя на одну и ту же страницу независимо от того, какой политике / требованию запрещен доступ. Есть ли способ решить, куда перенаправить на основе политики или требования?

...