我知道以前曾有人问过这样的问题,但任何答案都没有解决我的问题。 我的 Asp.net Core C# 项目(Angular 前端)有问题。它使用 Auth0 身份验证。 在 Chrome 中可以正确登录,但在 Firefox 和 Safari 中却停留在登录页面。
当我通过关闭增强跟踪保护在 Firefox 中允许第三方 cookie 时,它在 Firefox 中正确登录,因此似乎 cookie 有问题。 这是我的“Startup.cs”文件代码:
public void ConfigureServices(IServiceCollection services)
{
// Other service configurations...
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin",
builder =>
{
builder.WithOrigins("https://X.com", "https://staging.X.com", "http://localhost:4200")
.AllowAnyHeader().AllowAnyMethod().AllowCredentials().SetIsOriginAllowed((host) => true);
});
});
// Other service configurations...
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.HttpOnly = Microsoft.AspNetCore.CookiePolicy.HttpOnlyPolicy.None;
options.Secure = CookieSecurePolicy.None; // for development without HTTPS
//options.Secure = CookieSecurePolicy.Always; // Set to Always in production
});
// Other service configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, AppDbContext context)
{
loggerFactory.AddAWSProvider(this.Configuration.GetAWSLoggingConfigSection());
StripeConfiguration.ApiKey = Configuration.GetSection("Stripe")["SecretKey"];
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseHealthChecks();
app.UsePathBase("/X-api");
app.UseDefaultFiles();
app.UseCors("AllowSpecificOrigin");
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoint => { endpoint.MapControllers(); });
app.UseMvc();
}
任何想法都可以帮助我 先谢谢你了
我找到了解决方案,它对我有用。
由于跨域认证是通过第三方cookie实现的,禁用第三方cookie会导致跨域认证失败。某些浏览器(例如 Firefox 和 Safari)默认禁用第三方 Cookie,这意味着跨域身份验证对于 Firefox 和 Safari 上的用户不起作用。让 Firefox 和 Safari 用户使用嵌入式登录的唯一方法是在 Auth0 中使用自定义域。
在 Auth0 中的租户上启用自定义域,并将您的 Web 应用程序托管在与您的 Auth0 自定义域具有相同顶级域的域中。
例如,您在 https://yourDomain.com 托管应用程序,并将 Auth0 自定义域设置为 https://login.yourDomain.com(而不是 https://yourDomain.auth0.com) )。这样,cookie 就不再是第三方的,因为您的 Auth0 租户和应用程序都使用相同的顶级域,因此不会被浏览器阻止。
有关代码的详细分步解决方案,您可以按照有关自定义域的 Auth0 文档。