ASP.NET Core 2.1无法在应用程序之间共享Cookie

时间:2018-11-16 04:12:14

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc

我正在尝试在应用程序之间共享cookie,以便不必不断登录一个应用程序并再次登录另一个应用程序。

这是我在两个应用程序上都拥有的启动程序

services.AddDbContext<DbContext>(options => options.UseSqlServer(Configuration["DatabaseConfiguration:ConnectionString"]));
services.AddMvc().AddJsonOptions(options =>
{
   options.SerializerSettings.ContractResolver
                = new Newtonsoft.Json.Serialization.DefaultContractResolver();
});
services.AddIdentity<ApplicationUsers, Roles>()
  .AddEntityFrameworkStores<DbContext>()
  .AddDefaultTokenProviders();
services.AddScoped<LogsData>();
services.AddScoped<ApplicationUsersData>();
services.AddScoped<CustomClaimsCookieSignInHelper<ApplicationUsers>>();

services.Configure<IdentityOptions>(options =>
{
    options.Password.RequireDigit = false;
    options.Password.RequireLowercase = false;
    options.Password.RequireNonAlphanumeric = true;
    options.Password.RequireUppercase = true;
    options.Password.RequiredLength = 6;
    options.User.AllowedUserNameCharacters =
    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
    options.User.RequireUniqueEmail = false;
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedPhoneNumber = false;
});

services.Configure<CookiePolicyOptions>(options =>
{
    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
    options.CheckConsentNeeded = context => false;
    options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDataProtection()
    .PersistKeysToFileSystem(KeyRingConfigurationManager.GetBasePath())
    .SetApplicationName("AppName");

services.ConfigureApplicationCookie(options => {
    options.Cookie.Name = ".AppName.Shared";
});

services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(5);

    options.LoginPath = "/Identity/Account/Login";
    options.AccessDeniedPath = "/Account/AccessDenied";
    options.SlidingExpiration = true;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

运行应用程序时,我注意到在Key文件夹中,出现了一个xml密钥文件。但是,当我启动第二个应用程序并导航到经过授权的控制器时,我又被踢回到了登录页面,这意味着我没有登录。我还缺少什么?

1 个答案:

答案 0 :(得分:0)

您能否检查有关添加服务会话的信息?我已经尝试过一些与此相关的代码,并且对我来说效果很好。

    services.AddSession(options =>
        {
            // Set a short timeout for easy testing.
            options.IdleTimeout = TimeSpan.FromDays(2);
            options.Cookie.HttpOnly = true;
            options.Cookie.Name = CookieAuthenticationDefaults.AuthenticationScheme;
        });

还要在您的COnfigure()方法中添加usesession()。

        app.UseSession();