asp.net-core-mvc - 有条件地处理 ASP.NET Core 中的拒绝访问行为
问题描述
我正在尝试在单个项目中创建一个包含 MVC 和 API 控制器的 ASP.Net Core 应用程序。对于身份验证,我使用 IdentityServer4。
Account/AccessDenied
当前,当用户未获得请求授权时,无论身份验证方案如何,他总是被重定向到路径。但我只想为 MVC 控制器保留这种行为。对于 API 请求,我只想返回 403 状态码。
配置:
services
.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(ApiResourceProvider.GetAllResources())
.AddAspNetIdentity<ApplicationUser>()
.AddInMemoryClients(clientStore.AllClients);
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = tokenAuth.Issuer,
ValidateAudience = true,
ValidAudience = tokenAuth.Audience,
ValidateLifetime = true,
IssuerSigningKey = tokenAuth.SecurityKey,
ValidateIssuerSigningKey = true
};
});
我怎样才能做到这一点?
解决方案
如果您使用 cookie,您可以覆盖 AccessDeniedPath,如下所示
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
}).AddCookie("Cookies", (options) =>
{
options.AccessDeniedPath = "/Authorization/AccessDenied";
})