AzureAD和IOS12 SameSite Cookie无限循环



我遇到的网站cookie问题与人们看到的问题相同。我正在使用AzureAD,当我应用现有的修复程序时,我仍然无法停止IOS12中的无限循环。

我阅读了这一页和这一页,详细介绍了将SameSiteMode设置为None。我是不是错过了什么新东西?

NET Core 2.1,AzureAD

这是我的启动类:

public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options))
.AddCookie(options=>options.Cookie.SameSite = SameSiteMode.None)
.Services.ConfigureExternalCookie(options =>
{
options.Cookie = new Microsoft.AspNetCore.Http.CookieBuilder()
{
SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None
};
});
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{

app.UseCors(builder =>
{
// cannot be set to AllowAnyOrigin, because then the response is not accepted, because the credentials are included
builder.WithOrigins("https://*.sharepoint.com")
.SetIsOriginAllowedToAllowWildcardSubdomains()
.AllowCredentials();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(new CookiePolicyOptions()
{
MinimumSameSitePolicy = SameSiteMode.None
});
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});

}

编辑:我在同一个盒子里部署了另一个应用程序,它没有同样的无限循环问题。我复制了配置以匹配该应用程序,但它仍然无法工作。两者都是新的。NET Core 2.1应用程序。

services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddAzureAd(options => Configuration.Bind("AzureAd", options))
.AddCookie();

和:

app.UseAuthentication();

有人能帮忙吗?

iOS 13之前的iOS版本不将"None"识别为SameSite的有效值,因此不会发送cookie。iOS 13已经修复了这一问题,但该修复程序没有向后移植到早期版本的iOS。

这在今天意义重大,因为预计将于2020年2月4日在Chrome 80中更改cookie的处理方式。一旦发布,Chrome将把没有SameSite的cookie视为SameSite=lax,并且不会在iFrame、POST等场景中发送它们。不幸的是,仅仅在所有cookie上设置SameSite=None是行不通的,因为你在早期版本的iOS(和MacOS Safari(中发现了这个问题。

这似乎与MS和Apple的最新更新配合使用。

最新更新