Добавить проект SignalR в существующий ASP. NET Core MVC проект с общей аутентификацией - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть существующий и работающий веб-сайт ASP. NET Core 3.1 MVC, использующий настройку по умолчанию «Индивидуальные учетные записи пользователей» (EF Core для SQL Server). Моя цель состоит в том, чтобы создать новый проект SignalR (Core), с которым может взаимодействовать существующее приложение, в особенности мне нужен повар аутентификации ie с существующего сайта, чтобы он был удобен для звонков в приложение SignalR (я думаю).

Я планирую (когда проблема, указанная ниже, будет решена) добавить проект SignalR в существующее Решение и настроить его на своем собственном поддомене (тот же домен, что и у существующего сайта, чтобы существующий сайт был www.mydomain.com, а SignalR сайт - уведомление hub.mydomain.com). Я нашел этот кажущийся полезным документ , который точно описывает, что мне нужно сделать, но (см. Код ниже) я не могу заставить его работать. Вот мой 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 на случай, если произошло взаимодействие с конвейером. Я предполагаю, что либо повар ie не готов, либо существует несоответствие имен, но я не знаю.

Последнее замечание: когда я запускаю это через VS / IIS Express, папка "/ cookiekeys" создается локально, и в ней есть файл Cook ie, который стоит того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...