AzureAD 和 IOS12 SameSite Cookie 无限循环
AzureAD and IOS12 SameSite Cookie Infinite Loop
我遇到了与我看到的相同的站点 cookie 问题。我正在使用 AzureAD,当我应用现有的修复程序时,我仍然无法停止 IOS12 中的无限循环。
我阅读了 this page and this one 将 SameSiteMode 设置为 None 的详细信息。我错过了什么新东西吗?
.NET 核心 2.1、AzureAD
这是我的启动 class:
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();
有人能帮忙吗?
这似乎适用于 MS 和 Apple 的最新更新。
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 将不起作用,因为您在 [=14= 的早期版本中发现了这里的问题](和 MacOS Safari)。
我遇到了与我看到的相同的站点 cookie 问题。我正在使用 AzureAD,当我应用现有的修复程序时,我仍然无法停止 IOS12 中的无限循环。
我阅读了 this page and this one 将 SameSiteMode 设置为 None 的详细信息。我错过了什么新东西吗?
.NET 核心 2.1、AzureAD
这是我的启动 class:
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();
有人能帮忙吗?
这似乎适用于 MS 和 Apple 的最新更新。
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 将不起作用,因为您在 [=14= 的早期版本中发现了这里的问题](和 MacOS Safari)。