.NetCore在IdentityServer4因为Cookies的SameSite导致授权登录跳转回登录页的问题
当我们用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 void ConfigureServices(IServiceCollection services) { services.Configure(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 void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseCookiePolicy(); }
就可以解决这个问题