首页 > 解决方案 > 有条件地处理 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
        };
    });

我怎样才能做到这一点?

标签: asp.net-core-mvcidentityserver4asp.net-core-webapiasp.net-authorization

解决方案


如果您使用 cookie,您可以覆盖 AccessDeniedPath,如下所示

services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            }).AddCookie("Cookies", (options) =>
            {
                options.AccessDeniedPath = "/Authorization/AccessDenied";
            })

推荐阅读