Я вижу довольно много связанных вопросов, но ни один не совсем такой же вопрос / рамки:
Я использую .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) =>
//{
//});
}