.NET Core 2.2 отправляет куки аутентификации, но не распознает их - PullRequest
0 голосов
/ 27 сентября 2019

Я использую .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();

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 27 сентября 2019

Поскольку вы используете ASP.NET Identity, вам не нужен этот код

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie();

Сервисы аутентификации уже добавлены к вашим услугам с services.AddIdentity<ApplicationUser, IdentityRole>

...