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

使用Authorize特性时Facebook登录重定向至错误URL的问题

解决Facebook登录后带#_=_导致[Authorize]拦截的问题

问题根源

Facebook登录回调会自动在URL末尾追加#_=_片段,当从该回调页面跳转至Home/Index时,浏览器会保留这个片段。再加上你当前的认证逻辑是自行生成JWT并存入Cookie,要么是认证中间件未配置读取该Cookie,要么是默认认证机制不识别自定义Cookie,最终导致带片段的请求被[Authorize]拦截。Google登录正常是因为其回调URL无此片段,认证流程未受干扰。

解决方案

方法一:跳转时清除URL片段

直接在ExternalLoginCallback中生成绝对URL跳转,彻底移除多余的#_=_:

// 替换原有return语句
var homeUrl = $"{Request.Scheme}://{Request.Host}{Url.Action("Index", "Home")}";
return Redirect(homeUrl);

方法二:使用Identity内置登录机制(推荐)

放弃自行生成JWT存Cookie的方式,改用ASP.NET Core Identity的SignInManager处理登录,这样[Authorize]能直接识别官方认证Cookie,不受URL片段影响:
修改ExternalLoginCallback代码,删除生成JWT和存Cookie的部分,替换为:

await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");

方法三:配置中间件读取Cookie中的JWT(若必须使用JWT)

如果坚持使用JWT,需配置认证中间件从Cookie读取Token。在Program.cs/Startup.cs中添加:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // 填入你的JWT验证参数
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "你的Issuer",
            ValidAudience = "你的Audience",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("你的密钥"))
        };

        // 从AuthToken Cookie中读取Token
        options.Events = new JwtBearerEvents
        {
            OnMessageReceived = context =>
            {
                context.Token = context.Request.Cookies["AuthToken"];
                return Task.CompletedTask;
            }
        };
    });

同时给HomeController的[Authorize]指定认证方案:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]

推荐优先使用方法一+方法二,既解决URL片段问题,又遵循官方认证流程,减少自定义逻辑带来的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:33:22