You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为使用Identity Windows身份验证的.Net 5 WebApp添加自定义Access Denied页面

问题原因

你当前配置不生效的核心是 IISDefaults.AuthenticationScheme(Windows身份验证)的403响应不会触发Cookie认证的重定向逻辑。ConfigureApplicationCookie 配置的 AccessDeniedPath 仅对Cookie认证方案生效,而你的默认验证、挑战方案均配置为Windows认证,因此请求被拒绝时直接返回浏览器默认403页,不会走Cookie的重定向规则。

对应解决方案

方案1:使用状态码页面中间件(推荐,适配Windows身份验证场景)

这是Windows身份验证场景下实现自定义错误页最简单的方案,修改Startup.cs的Configure方法,在身份验证/授权中间件之前添加状态码处理中间件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 其他前置配置...
    app.UseRouting();

    // 添加这行,优先处理状态码,403会重写路径到自定义页面,保留原始请求状态码
    app.UseStatusCodePagesWithReExecute("/Account/AccessDenied", "?statusCode={0}");
    
    app.UseAuthentication();
    app.UseAuthorization();
    // 其他后续配置...
}

如果需要触发浏览器跳转,可以将UseStatusCodePagesWithReExecute替换为UseStatusCodePagesWithRedirects。

方案2:调整认证方案适配Cookie配置

如果你需要沿用Cookie的访问拒绝规则,可以修改默认挑战方案为Cookie认证,让授权失败时触发Cookie的重定向逻辑:

services.AddAuthentication(o =>
{
    o.DefaultAuthenticateScheme = IISDefaults.AuthenticationScheme;
    o.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; // 修改挑战方案为Cookie
    o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });

修改后你之前配置的AccessDeniedPath即可正常生效。

问题解答

你提问的「是否可以通过设置CookieAuthenticationOptions.AccessDeniedPath属性将访问被拒绝的请求重定向到自定义页面」,答案是仅当请求使用Cookie认证方案、或授权失败时的挑战方案为Cookie认证时生效,纯Windows身份验证默认配置场景下无法直接通过该配置实现。

内容的提问来源于stack exchange,提问作者Tolbxela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:48:05