gpt4 book ai didi

c# - ASP.NET 核心标识 : How to redefine Forbid processing

转载 作者:行者123 更新时间:2023-12-04 15:44:21 28 4
gpt4 key购买 nike

情况:我从 PageModel 返回 Forbid() 并且这会启动响应并重定向 (302) 到 /AccessDenied&returnUrl=...

这里我指定路径:

 // configuration was used
serviceCollection.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = new PathString("/AccessDenied");
});

但是我怎样才能完全覆盖“重定向响应”创建并指定我自己的 GET 参数(如 returnUrl)或重新定义 returnUrl 值(我想传递我自己的值保存在自定义请求 feature)?

或者,我可以手动重定向到 AccessDenied,而不是返回 Forbid()。但我想继续使用 Forbid() 以实现示范性和一致性。

更新:这也不起作用

public void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.ConfigureApplicationCookie(options =>
{
//options.AccessDeniedPath = new PathString("/AccessDenied");
options.Events.OnRedirectToAccessDenied = context =>
{
context.Response.Redirect("/AccessDenied&t=100");
return Task.CompletedTask;
};
});

// need for password reset functionality
serviceCollection.AddDbContext<WebUserDbContext>(optionsBuilder =>
optionsBuilder.UseSqlServer(ApplicationSettings.WebUserStorageConfiguration.ConnectionString));

serviceCollection.AddIdentity<WebUser, IdentityRole<int>>( options =>
{
options.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<WebUserDbContext>()
.AddDefaultTokenProviders();

// generally it is a version of routin by

serviceCollection.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

附言这是不需要身份验证但管理用户记录的服务站点。因此,站点未启用 MS Identity Lib 身份验证。身份类型刚刚被放入容器,因为我需要特定的身份 API 功能:“重置密码”。这是愚蠢的情况:UserManager 类似的 Identity API 类是如此复杂,以至于除了从 DI/容器中获取之外,不可能以其他方式构造它们。请不要在您的 API 中分享这种疯狂的 MS DI。

有趣的是,没有 serviceCollection.AddIdentity 浏览器在 .Forbid() 上收到“错误 500”并且断点仍然不会在 context.Response 上停止.Redirect("/AccessDenied&t=100");

最佳答案

重定向到配置的 AccessDeniedPath 是 cookie 身份验证的默认行为。它会自动添加一个默认为当前 URL 的 returnUrl 参数。如果您在身份验证属性中指定 RedirectUri,则会改用该 URL。

例如,在 Controller 内部:

return Forbid(new AuthenticationProperties
{
RedirectUri = Url.Action("ActionAfterForbid"),
});

这基本上会生成到 URL {AccessDeniedPath}?returnUrl=/exampleController/ActionAfterForbid 的重定向。

如果您需要更多自定义,您还可以覆盖 RedirectToAccessDenied event cookie 身份验证选项:

services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToAccessDenied = context =>
{
// context.Options.AccessDeniedPath would be the configured path
// context.RedirectUri is the passed or automatically set up redirect URI
// context.HttpContext is the HttpContext if you want to modify features

// default behavior is basically this:
context.Response.Redirect(context.RedirectUri);
return Task.CompletedTask;
};
});

在那里,你可以做任何你想做的事情。

请注意,在调用 AddIdentity 之后,您必须调用 ConfigureApplicationCookie。这是因为后者会为应用程序 cookie 本身配置一些默认值,因此如果您配置身份验证事件,它们将被 AddIdentity 覆盖。相反,您想用 ConfigureApplicationCookie 覆盖默认设置,因此您必须在之后调用它。

关于c# - ASP.NET 核心标识 : How to redefine Forbid processing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510759/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com