У меня есть существующий и работающий веб-сайт 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, который стоит того.