Cookie 在 Firefox 和 Safari 中不起作用,并且不允许我登录,但在 Chrome 和 Opera 中可以正常工作

问题描述 投票:0回答:1

我知道以前曾有人问过这样的问题,但任何答案都没有解决我的问题。 我的 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();
}

任何想法都可以帮助我 先谢谢你了

asp.net-core firefox cookies cors auth0
1个回答
0
投票

我找到了解决方案,它对我有用。

由于跨域认证是通过第三方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 文档

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.