OwinContext.Authentication.SignIn не создает cookie - PullRequest
0 голосов
/ 29 мая 2019

Я вижу довольно много связанных вопросов, но ни один не совсем такой же вопрос / рамки:

Я использую .NET core 2.2 с Angular 7 для создания веб-приложения, используя промежуточное программное обеспечение OWIN для аутентификации. В конце моего метода входа я вызываю OwinContext.Authentication.SignIn (идентичность). Насколько я понимаю, если OWIN настроен правильно, этот метод должен привести к cookie создается и добавляется в браузер. Однако я не вижу созданный файл cookie (проверено с помощью Google Chrome).

Я думаю, что проблема также может быть вызвана тем, как я обращаюсь к OwinContext. В большинстве примеров, которые я видел в Интернете, используйте Request.GetOwinContext (), чтобы получить В контексте, но кажется, что этот метод недоступен. Вместо этого я использую следующие шаги для настройки контекста owin в логине контроллер перед вызовом метода входа:

var env = new OwinEnvironment(this.HttpContext);
var features = new OwinFeatureCollection(env);
var _owinContext = new OwinContext(env.ToDictionary(x = > x.Key, x => x.Value));

Но создает ли это отдельный OwinContext от того, который был определен ранее? Может ли это объяснить, почему я не вижу созданный файл cookie? создается в дополнительном "пустышке" OwinContext, который ничего не делает? И если это правда, как я могу получить доступ к OwinContext?

Моя начальная конфигурация Startup.cs выглядит следующим образом:

ConfigureServices:
public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
        });

        services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.HttpOnly = true;
            options.LoginPath = "/api/Login/Login/";
            options.SlidingExpiration = true;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddSpaStaticFiles(configuration =>
        {
            configuration.RootPath = "ClientApp/dist";
        });

        services.AddAuthentication(DefaultAuthenticationTypes.ApplicationCookie)
        .AddCookie(o =>
            {
                o.LoginPath = "/api/Login/Login/";
                o.CookieManager = new ChunkingCookieManager();
                //o.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest;
                o.Cookie.Domain = "localhost";
                o.Cookie.IsEssential = true;

            }
        );
    }

Настройка: public void Configure (приложение IApplicationBuilder, окружающая среда IHostingEnvironment) {

        //app.Use((context, next) =>
        //{
        //    var httpContext = context.Get<HttpContextBaseExtensions>(typeof(HttpContextBaseExtensions).FullName);
        //});
        app.UseOwin();
        //env.ApplicationName = "MoveItAdministration";
        app.UseOwin(setup => setup(next =>
        {
            var builder = new AppBuilder();
            var lifetime = (IApplicationLifetime)app.ApplicationServices.GetService(typeof(IApplicationLifetime));

            var properties = new AppProperties(builder.Properties);
            properties.AppName = "MoveItAdministration";
            properties.OnAppDisposing = lifetime.ApplicationStopping;
            properties.DefaultApp = next;

            //Configuration(builder);
            //builder.Build();
            return builder.Build();
        }));

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseSpaStaticFiles();

        CookiePolicyOptions opts = new CookiePolicyOptions();

        app.UseCookiePolicy();

        app.UseAuthentication();

        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");
            }
        });

        //app.UseRequestLocalization((context, next) =>
        //{

        //});

    }
...