Как восстановить идентификатор сессии ASP.NET Core 2.2 - PullRequest
0 голосов
/ 04 июня 2019

Я создаю пример одностраничного приложения.Для этого я следовал инструкциям в Microsoft по созданию веб-API.Я успешно реализовал сессии и токены csrf.Тем не менее, я несколько раз создавал бэкэнд с другими фреймворками (это потому, что проект предназначен для демонстрации моей работы с различными фреймворками на разных языках) и для обеспечения согласованности, в других фреймворках мне нужно реализовать сеанс перед входом в систему,и секрет csrf сохраняется в сеансе.Таким образом, при входе в систему токен csrf проверяется с помощью заголовка ajax, токен изменяется, и создается новый сеанс для пользователя, который вошел в систему. То же самое происходит при выходе из системы.Laravel и Django являются примерами этой реализации.В ASP.NET Core я не могу найти способ сделать это, так как сессия всегда одинакова до закрытия браузера, поэтому, когда я тестирую с почтальоном, мне никогда не удается восстановить идентификатор, не говоря уже осоздать новую сессию.Это и секрет CSRF находится в его собственном файле cookie против подделки, а не связан с сеансом.Можно ли как-нибудь реализовать это в ASP.NET Core?

Вот код на всякий случай, но я сомневаюсь, что он вам понадобится:

Startup.cs

public void ConfigureServices(IServiceCollection services)
    services.AddAntiforgery(options => {
        // Set Cookie properties using CookieBuilder properties
        options.HeaderName = "X-XSRF-TOKEN";
        options.SuppressXFrameOptionsHeader = true;
    });

    services.AddMvc()
        .AddMvcOptions(options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()));

    // other services ommitted
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IAntiforgery antiforgery) {
    app.Use(next => context => { // set up csrf middleware
        var tokens = antiforgery.GetAndStoreTokens(context);
        context.Response.Cookies.Append(
            Environment.GetEnvironmentVariable("XSRF_COOKIE"), 
            tokens.RequestToken, 
            new CookieOptions() { 
                MaxAge = TimeSpan.FromMinutes(sessionLifetime),
                HttpOnly = false ,
                Secure = Environment.GetEnvironmentVariable("APP_ENV") != "local"
            });
        return next(context);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...