Cookie 阻止问题

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

我在 .NET Core 网站中遇到与 cookie 相关的问题。特别是在使用 Stripe 支付网关时,会出现此问题。这是场景:

我的网站由两个项目组成:客户端项目和API项目。 这些项目部署在不同的服务器上:

客户端网址:https://maindomain.com/

API URL:https://backendapis.maindomain.com/api/

当客户尝试使用 Stripe 进行付款时,就会出现此问题。无论支付成功还是取消,客户端都会退出。

经过调查,我注意到 cookie 在此操作后行为异常。具体来说,我收到错误消息:“此 cookie 被阻止,因为请求 URL 的域与 cookie 的域不完全匹配,请求 URL 的域也不是 cookie 域属性值的子域。”

这是从 stripe 重定向后 cookie 发生的情况

以下是我为客户端配置 cookie 的方法:

    services.Configure<CookiePolicyOptions>(options =>
      {
          options.CheckConsentNeeded = context => false;
          options.MinimumSameSitePolicy = SameSiteMode.Lax;
          options.Secure = CookieSecurePolicy.Always;
      });


 #region "Session init"
 services.AddDistributedMemoryCache();
 services.AddSession(options =>
 {
     options.Cookie.Name = ".AspNetCore.Session.khaled.Client";
     options.IdleTimeout = TimeSpan.FromDays(150);
     options.Cookie.IsEssential = true;
     options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
 });
 #endregion "Session init"
///////////////////////////// and this is the pipline :

        app.UseAuthentication();
        app.UseSession();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();
        app.UseCookiePolicy();
      
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

对于 API,没有显式设置 CORS 配置。但是,我假设它默认允许来自所有来源的请求,因为我可以直接从浏览器调用一些没有身份验证的 API。

 app.UseHttpStatusCodeExceptionMiddleware();
 app.UseHttpsRedirection();
 app.UseRouting();
 app.UseStaticFiles();
 app.UseAuthentication();
 app.UseAuthorization();

 app.UseEndpoints(endpoints =>
 {
     endpoints.MapControllers();
 });

对于 cookie 为何会出现这种行为,尤其是在 Stripe 支付的情况下,您有什么见解吗?我的配置中是否缺少某些内容?

asp.net-mvc asp.net-web-api cors stripe-payments session-cookies
1个回答
0
投票

我找到了,问题出在我们在stripe中配置的返回URL

成功的返回URL为https://maindomain.com/Payment/Success

取消的返回URL是https://maindomain.com/Payment/Cancel

因此,当用户使用域 https://www.maindomain.com/ 登录时,他们将被注销,因为带有“www”的域与没有“www”的域不同,正如您所看到的返回URL 不是“www”版本。

© www.soinside.com 2019 - 2024. All rights reserved.