在ASP.NET Core 2中,Microsoft pretty insistent使用policies and requirements完成所有授权任务。使用最基本的示例,我可以想到:
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
。
据我所知,我实际上并没有告诉我的应用程序在不满足策略要求时将用户发送到哪里,我也无法弄清楚该怎么做。
当不满足要求时,如何指定将用户重定向到的位置?另外,是否可以根据策略/要求重定向到其他位置?
更新:
需要明确的是,我在我的应用程序中使用ASP.NET Core Identity。我的问题的第一部分的答案是在配置应用程序cookie时设置AccessDeniedPath
属性:
services.ConfigureApplicationCookie(o =>
{
o.AccessDeniedPath = "/Some/Path";
});
但这意味着无论策略/要求被拒绝访问,我都无法重定向到同一页面。是否有任何方法可以根据策略或要求来决定重定向到何处?