将SignalR项目添加到具有共享身份验证的现有ASP.NET CoreMVC项目

时间:2020-02-16 21:51:52

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

我有一个现有的并且正在运行的ASP.NET Core 3.1 MVC网站,使用默认的“个人用户帐户”身份设置(SQL Server的EF Core)。我的目标是创建一个现有应用程序可以与之交互的新SignalR(核心)项目,最值得注意的是,我需要来自现有站点的身份验证cookie才能很好地调用SignalR应用程序(我认为)。

我计划(在解决以下问题后)将SignalR项目添加到现有解决方案中,并在其自己的子域(与现有站点相同的域)上对其进行配置,因此现有站点为www.mydomain.com, SignalR网站是notificationhub.mydomain.com)。我发现此seeming-helpful document准确地描述了我需要做的事情,但是(请参见下面的代码)我无法使它工作。这是我现有站点的Startup.cs,其中包含已添加的内容。在将新网站纳入等式之前,我想确保它适用于当前网站:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => false;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.Configure<IISOptions>(options => {});

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddDbContext<MySiteDb>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    // Newly-added code begin ---
    services.AddDataProtection()
        .PersistKeysToFileSystem(new System.IO.DirectoryInfo("/cookiekeys"))
        .SetApplicationName("MySiteApp");

    services.ConfigureApplicationCookie(options => {
        options.Cookie.Name = ".AspNet.MySite";
        options.Cookie.Path = "/";
        options.Cookie.Domain = ".MySite.com";
    });
    // Newly-added code end---

    services.AddControllersWithViews();

    // Add application services.
    services.AddTransient<IEmailSender, EmailSender>();

    // Add custom services.
    services.AddScoped<IRulesRepository, RulesRepository>();
    services.AddScoped<ICampaignRepository, CampaignRepository>();
    services.AddScoped<IParticipantRepository, ParticipantRepository>();
    services.AddScoped<ICharacterRepository, CharacterRepository>();
    services.AddScoped<IMessageRepository, MessageRepository>();
    services.AddScoped<IUserRepository, UserRepository>();
}

我看到的行为是登录不会失败(带有错误),但实际上并没有真正登录用户。我在浏览器中看到的cookie并不奇怪,但是我无法知道新代码的外观。最后,我在调用AddIdentity之前和之后尝试了这段代码,以防万一与管道发生交互。我的猜测是没有制作Cookie或命名不匹配,但我不知道。

最后一点要注意的是,当我通过VS / IIS Express运行此文件时,“ / cookiekeys”文件夹是在本地创建的,并且其中包含一个具有cookie外观的文件,这很值。

0 个答案:

没有答案
相关问题