首页 > 解决方案 > 尝试在 .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
                   };
               });```

标签: c#asp.net-identityasp.net-core-webapitwitter-oauth

解决方案


推荐阅读