Я использую .NET Core 2.2 Web API с Angular 8 SPA.Бит Angular не важен для вопроса, но важно отметить, что Я не использую MVC .
Я также использую EntityFramework Identity для аутентификации пользователей с помощью файлов cookie.
Для тестирования я использую Insomnia .
Моя конечная точка для входа в систему работает и создает файл cookie, который сохраняется Insomnia и повторно отправляется в будущих запросах.
Мои проблемы начинаются здесь.В настоящее время я не могу заставить приложение распознавать cookie, и мой API отвечает 401 Unauthorized
на любые конечные точки, отмеченные атрибутом [Authorize]
, несмотря на наличие действительного cookie, срок службы которого составляет 7 дней.
Вот мой Startup.cs
file:
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(x =>
{
// stuff
});
services.AddDbContext<SensoLicensingContext>(options => {
// stuff
});
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<LicencingContext>()
.AddDefaultTokenProviders();
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.Headers["Location"] = context.RedirectUri;
context.Response.StatusCode = 401;
return Task.CompletedTask;
};
});
services.AddTransient<IEmailSender, EmailSender>();
services.Configure<AuthMessageSenderOptions>(options =>
Configuration.GetSection("SendGridEmailSettings").Bind(options));
services
.AddMvcCore()
.AddApiExplorer()
.AddAuthorization()
.AddFormatterMappings()
.AddJsonFormatters()
.AddCors()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
// In production, the Angular files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
}
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
LicensingContext dbContext)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(x =>
{
x.SwaggerEndpoint(Constants.SwaggerEndPointUrl, Constants.SwaggerEndPointName);
});
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
app.UseHttpsRedirection();
}
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseAuthentication();
dbContext.Database.EnsureCreated();
IdentityDataInitializer.SeedData(userManager, roleManager);
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
}
У меня есть ощущение, что проблема заключается в этой части, либо в моем заказе, либо в неправильном месте, но я относительно новичок в .NET Core, поэтому я неконечно:
services
.AddMvcCore()
.AddApiExplorer()
.AddAuthorization()
.AddFormatterMappings()
.AddJsonFormatters()
.AddCors()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
Любая помощь будет принята с благодарностью.