.Net Core 2.2与Apache2反向代理的共享会话

时间:2019-08-23 19:48:59

标签: apache session-cookies .net-core-2.2

我在Apache2反向代理后面有两个作为Linux服务运行的.Net Core 2.2 Web应用程序实例(test&test2)。我正在尝试在两个应用程序之间共享会话。

问题是application1开始在路径/创建会话cookie。 Application2启动它自己的会话,并将相同的cookie名称写入路径/。试图弄清为什么application2无法看到application1现有的cookie并使用它代替创建覆盖application1会话的新会话。

我认为这与我的.conf配置有关,因为这两个应用程序都在各自独立的会话中按预期运行。当我尝试通过反向代理共享时,我看到了一个问题。我也不是Apache专家,所以很可能我在这里缺少某些东西或设置了一些错误。

Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.Lax;
        });

        services.AddDistributedMemoryCache(); 

        int sessionTimeout = int.Parse(_configuration["Hosting:SessionTimeout"]);
        services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromMinutes(sessionTimeout);
            options.Cookie.SameSite = SameSiteMode.Strict;
            options.Cookie.HttpOnly = true;
            options.Cookie.IsEssential = true;
            options.Cookie.Name = "session";
        });

        services.AddHttpContextAccessor();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ClassLibrary.Mvc.Constants.PathBase = string.Empty;
        if (!string.IsNullOrEmpty(_configuration["Hosting:RoutePath"]))
        {
            string routePath = _configuration["Hosting:RoutePath"].Trim();
            if (routePath[0] != '/')
                routePath = "/" + routePath;
            if (routePath[routePath.Length - 1] == '/')
                routePath = routePath.Substring(0, (routePath.Length - 1));

            app.UsePathBase(routePath);
            ClassLibrary.Mvc.Constants.PathBase = routePath;
            _logger.Information($"Route Path: {routePath}");
        }

        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });

        app.UseHttpsRedirection();
        app.UseCookiePolicy();

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

application.conf

<VirtualHost *:443>

    SSLEngine On
    SSLUseStapling Off
    SSLCertificateFile  /etc/apache2/ssl/application.cdcavell.tst/certificate.crt
    SSLCertificateKeyFile /etc/apache2/ssl/application.cdcavell.tst/certificate.key

    DocumentRoot "/var/www/Application"
    ServerName application.cdcavell.tst
    ServerAdmin cdcavell@gmail.com

    ErrorLog /var/www/Application/logs/apache2-error.log
    CustomLog /var/www/Application/logs/apache2-access.log common
    LogLevel Error


    Session On

    ProxyPreserveHost On
    SSLProxyEngine On
    SSLProxyVerify None
    SSLProxyCheckPeerCN Off
    SSLProxyCheckPeerName Off

    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

    <Location "/test">
        ProxyPass "https://127.0.0.1:5020/test"
        ProxyPassReverse "https://127.0.0.1:5020/test"
        ProxyPassReverseCookiePath "/test" "/"        
        Order allow,deny
        Allow from all
    </Location>

    <Location "/test2">
        ProxyPass "https://127.0.0.1:5023/test2"
        ProxyPassReverse "https://127.0.0.1:5023/test2"
        ProxyPassReverseCookiePath "/test2" "/"        
        Order allow,deny
        Allow from all
    </Location>

</VirtualHost>

完整来源: GitHub branch feature/0.3.0



状态:

  • 08-24-2019-验证它与CookiePolicy不相关。删除了CookiePolicy编码,并获得了相同的结果。
  • 08-24-2019-尝试显式设置cookie域(带前导点)。收到相同的结果,两个应用程序都用新会话覆盖会话cookie。
  • 08-24-2019-在application2的请求标头中以applicationcookie的形式返回由application1编写的找到的会话cookie,但application2却未将其视为会话(可能只是一个cookie)并正在创建新会话。

0 个答案:

没有答案