c# - 尝试在 .NET Core Web API 中使用 twitter 登录时出现“无效的 cookie 状态”
问题描述
我已经在 .NET Core WebAPI 项目中集成了 Twitter 身份验证。它重定向到 Twitter 登录页面,但之后当重定向到“external-login-callback”URL 时,它会抛出“invalid cookie state”
我添加了 AddCookie() 和 AddSession() 但没有任何帮助。我通过创建 OnRemoteFailure 事件并重定向到前端站点来处理错误页面。
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie("ExternalCookies", options =>
{
options.Cookie.Name = "external_auth_cookie";
options.Cookie.SameSite = SameSiteMode.None;
})
.AddFacebook(option =>
{
option.AppId = Configuration["ExternalLogin:Facebook:AppId"];
option.AppSecret = Configuration["ExternalLogin:Facebook:AppSecret"];
})
.AddTwitter(options =>
{
options.ConsumerKey = Configuration["ExternalLogin:Twitter:ConsumerKey"];
options.ConsumerSecret = Configuration["ExternalLogin:Twitter:ConsumerSecret"];
options.RetrieveUserDetails = true;
options.CallbackPath = new PathString(Configuration["ExternalLogin:Twitter:CallBackPath"]);
options.Events.OnRemoteFailure = ctx =>
{
ctx.Response.Redirect(Configuration["ExternalLogin:FeCallBackUrl"] + "?err=Login failed");
ctx.HandleResponse();
return Task.CompletedTask;
};
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = Configuration.GetValue<string>("Jwt:Issuer"),
ValidAudience = Configuration.GetValue<string>("Jwt:Audience"),
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetValue<string>("Jwt:Secret"))),
ValidateIssuer = true,
ValidateAudience = false
};
});```
解决方案
推荐阅读
- ajax - Explorer 11 中的 AJAX
- java - 带有数据绑定的房间注释处理器;导致找不到符号类 BR
- python - Flake8 插件安装
- netlogo - NetLogo - 单方面交换附近海龟的价值
- java - Placepicker 仅在双击后工作
- powershell - 从 ADGroupMember 获取属性
- c# - 如何跳过某些路径的 owin 授权
- excel - 如何在 maatwebsite 中获取 excel 到数组
- entity-framework-core - EF Core 处理备用主键
- mongodb - MongoDB:获取具有给定值的文档的_id并在查询中使用它