.NetCore在IdentityServer4因为Cookies的SameSite导致授权登录跳转回登录页的问题

x33g5p2x  于2021-11-21 转载在 .NET  
字(1.4k)|赞(0)|评价(0)|浏览(279)

当我们用ids4的授权登录的时候会重新跳回登录页并且回调/singin-oidc的时候会报错,主要问题是我们没有使用https,在使用http的情况下Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性限制第三方 Cookie,所以我们需要设置SameSite。

我们的授权流程是:web应用->ids4服务器->web应用。

所以我们在web应用的starup.cs的ConfigureServices中设置如下红色的代码:

services.AddAuthentication(options =>{
  options.DefaultScheme = "Cookies";
  options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>{
  options.Authority = "http://localhost:5000";
  options.RequireHttpsMetadata = false;
  options.ClientId = "mvc";
  options.ClientSecret = "secret";
  options.ResponseType = "code";
  options.SaveTokens = true;

//必须设置cookie signin-oidc 返回的cookie设置
options.CorrelationCookie.SecurePolicy =CookieSecurePolicy.None;
  options.NonceCookie.SecurePolicy =CookieSecurePolicy.None;
  options.CorrelationCookie.SameSite =SameSiteMode.Strict;
  options.NonceCookie.SameSite =SameSiteMode.Strict;
});

在ids4的starup.cs中设置如下红色的代码:

public voidConfigureServices(IServiceCollection services)
{services.Configure<CookiePolicyOptions>(option =>{
    option.MinimumSameSitePolicy =SameSiteMode.Strict;
    option.Secure =CookieSecurePolicy.None;
  });
}
//This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public voidConfigure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseCookiePolicy();}

就可以解决这个问题

相关文章