Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication ASP.Net核心-禁止页面上的策略和Cookie身份验证原因_Authentication_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Authentication ASP.Net核心-禁止页面上的策略和Cookie身份验证原因

Authentication ASP.Net核心-禁止页面上的策略和Cookie身份验证原因,authentication,asp.net-core,asp.net-core-mvc,Authentication,Asp.net Core,Asp.net Core Mvc,我正在使用CookieAuthentication&Policy检查用户,并在失败时重定向到帐户/禁止的url。。。在页面上,我想显示一些详细信息。。比如 他们试图访问的页面 失败的原因 和其他调试信息 我的应用程序中有6种类型的用户级别。 目前,当它无法满足用户角色时,它确实会将用户重定向到禁止页面。。。但我无法追踪他们在被禁事件发生前试图访问的页面 Startup.cs中的ConfigureServices() services.AddAuthorization(options =>

我正在使用CookieAuthentication&Policy检查用户,并在失败时重定向到帐户/禁止的url。。。在页面上,我想显示一些详细信息。。比如

  • 他们试图访问的页面
  • 失败的原因
  • 和其他调试信息
我的应用程序中有6种类型的用户级别。 目前,当它无法满足用户角色时,它确实会将用户重定向到禁止页面。。。但我无法追踪他们在被禁事件发生前试图访问的页面

Startup.cs中的ConfigureServices()

services.AddAuthorization(options =>
{
    options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationScheme = "Cookie",
    LoginPath = new PathString("/Account/Login/"),
    AccessDeniedPath = new PathString("/Account/Forbidden/"),
    AutomaticAuthenticate = true,
    AutomaticChallenge = true
});
在Startup.cs中配置()

services.AddAuthorization(options =>
{
    options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationScheme = "Cookie",
    LoginPath = new PathString("/Account/Login/"),
    AccessDeniedPath = new PathString("/Account/Forbidden/"),
    AutomaticAuthenticate = true,
    AutomaticChallenge = true
});
我的控制器:

[Authorize(Policy = "AdminOnly")]
public class MyController : Controller
{
    ....
}

似乎没有简单的方法(我找不到任何方法)在mvc管道中捕获禁止的结果。另一种方法可能是使用
UseStatusCodePages
并处理403状态代码,但它不在mvc上下文中,您只能以这种方式使用HttpContext属性(如路径)。禁止页面上的ReturnUrl值/querystring始终为空-%2f。。。如果MVC引擎可以填充该页面,那将非常有用。我查看了源代码,cookie身份验证中间件将返回url发送到access denied page()。你确定它是空的吗?我复制了你的代码,我可以确认returnUrl不是空的。所以问题可能在其他地方。您是否尝试过
var feature=HttpContext.Features.Get()?是的,你们是对的。通常,它会将ReturnURL放在禁止页面上。我看到%2F是因为该用户试图访问主页/默认页。我仍然认为检测哪个策略阻止用户访问是很方便的。