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

Cookie过期时如何返回401状态而非302重定向(无Identity认证)

解决方案:让API请求在Cookie过期时返回401而非302重定向

针对你使用ASP.NET Core 2.0.5 + WsFederation 2.0.3的Cookie认证场景,要实现API请求在Cookie过期/未认证时返回401状态码,核心是修改Cookie认证的重定向事件逻辑,区分普通页面请求和API请求。

完整的ConfigureServices配置示例

public void ConfigureServices(IServiceCollection services)
{
    // 添加MVC服务(适配包含API和页面的项目)
    services.AddMvc();

    // 配置认证体系:默认用Cookie认证,挑战时走WsFederation
    services.AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
    })
    .AddCookie(options =>
    {
        // 设置你需要的短超时时间,示例为15分钟
        options.ExpireTimeSpan = TimeSpan.FromMinutes(15);
        
        // 核心逻辑:拦截重定向行为,针对API请求返回401
        options.Events.OnRedirectToLogin = context =>
        {
            // 判定是否为API请求:可根据路径、请求头灵活调整规则
            bool isApiRequest = context.Request.Path.StartsWithSegments("/api") 
                               || context.Request.Headers["Accept"].ToString().Contains("application/json");

            if (isApiRequest)
            {
                // API场景直接返回401未授权
                context.Response.StatusCode = StatusCodes.Status401Unauthorized;
                return Task.CompletedTask;
            }
            // 普通页面请求保持默认的302重定向到登录页逻辑
            context.Response.Redirect(context.RedirectUri);
            return Task.CompletedTask;
        };
    })
    .AddWsFederation(options =>
    {
        // 配置你的WsFederation服务参数,替换为实际值
        options.MetadataAddress = "你的WsFederation元数据地址";
        options.Wtrealm = "你的Realm标识";
    });
}

关键逻辑说明

  • API请求判定:通过检查请求路径前缀(如/api)或Accept头是否包含application/json来区分API请求,你可以根据项目的实际路由规则调整这个判断条件。
  • 重定向事件拦截:在OnRedirectToLogin事件中,对API请求直接返回401状态码,避免触发302重定向;普通页面请求则保留原有的登录跳转逻辑,兼顾页面和API的不同需求。
  • Cookie超时配置:通过ExpireTimeSpan设置你需要的短超时周期,满足业务对会话时效性的要求。

额外提示

如果你的API是纯REST风格,还可以在API控制器上添加[ApiController]特性,配合认证策略进一步优化响应逻辑,但上述配置已经能解决核心问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:34:52