【问题标题】:ASP.NET Core 2.1 Unable to share cookies among applicationsASP.NET Core 2.1 无法在应用程序之间共享 cookie
【发布时间】:2018-11-16 04:12:14
【问题描述】:

我正在尝试在应用程序之间共享 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);

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

【问题讨论】:

  • 你有两个不同的应用程序吗?
  • 是的,但是应用程序 2 引用了应用程序 1 中的某些组件
  • 好的。我从下面的 msdn 站点得到了一些想法。可能对你有帮助,请参考link
  • 这就是我所关注的。

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


【解决方案1】:

能否请您检查一下如何为您的服务添加会话?我已经尝试了一些关于此的代码,它对我来说效果很好。

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

还要在你的 CConfigure() 方法中添加 usesession()。

        app.UseSession();

【讨论】:

  • 我必须为此使用会话吗?
  • 据我所知,会话有助于为应用程序保存 cookie。会话过期后,您的 cookie 将不起作用。
猜你喜欢
  • 2018-12-20
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
相关资源
最近更新 更多