Как создать и получить доступ к сеансу .net core api? - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно создать и получить доступ к сессии в API.Например, у меня есть API под названием Логин, Профиль.Когда в это время вызывается API входа в систему, мне нужно создать сеанс, и мне нужно получить доступ к сеансу в профиле API.Когда сеанс очищен, логин и профиль API не позволяют пользователю получить доступ.Как это сделать.

Спасибо ..

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

На самом деле .net ядро ​​может легко получить доступ к сеансу.Механизм сессий является базовой функцией в aspnet (также .netcore) https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2

Я думаю, вам просто нужно добавить

    services.AddDistributedMemoryCache();

    services.AddSession(options =>
    {
        // Set a short timeout for easy testing.
        options.IdleTimeout = TimeSpan.FromSeconds(10);
        options.Cookie.HttpOnly = true;
    });

в ConfigureServices и:

app.UseSession();

in Configure

Тогда вы можете использовать его где угодно, вводя ISession там, где вам нужно.Поскольку это распространяется по проекту, вы должны сериализовать свои данные, используя что-то вроде JsonConvert.SerializeObject и десериализовать их обратно.

Эта функция, описанная здесь, не имеет ничего общего с концепциями безопасности.

0 голосов
/ 13 мая 2019

Первая установка пакета nuget - Microsoft.AspNetCore.Session

В файле Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    .....
    services.AddSession(options => {
        options.IdleTimeout = TimeSpan.FromMinutes(20);//You can set Time  
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
        });
    .....
}

public void Configure(IApplicationBuilder app)
{
    ....
    app.UseSession();
    ....
}

В файле HomeController

using Microsoft.AspNetCore.Http;

public class HomeController : Controller
{    
    public ActionResult Index()
    {   
      HttpContext.Session.SetString("key", "value"); // Set Session  
      var x = HttpContext.Session.GetString("key"); // Get Value of Session
    }    
}

Вы также можете установить целое числозначение в сеансе, используйте метод SetInt32 и получите из метода GetInt32.Надеюсь, это поможет вам ..

0 голосов
/ 25 февраля 2019

В Startup.cs вы можете добавить аутентификацию cookie, добавив эту строку (вы также можете указать параметры для продолжительности сеанса и т. Д.).

services.AddAuthentication().AddCookie();

Чтобы создать сеанс при входе, изконтроллер, вы можете вызвать это, чтобы войти как пользователь с набором утверждений (в основном пары ключ / значение, которые описывают то, что вам нужно знать о пользователе):

await HttpContext.SignInAsync(userId, claims);

Это создает ClaimsPrincipal, который можетбыть доступным через свойство User на Controller:

User.HasClaim("someclaim", "somevalue")

В конечном итоге промежуточное программное обеспечение зашифровывает заявки и сохраняет их в файле cookie, поэтому аутентификация по-прежнему остается без сохранения состояния с точки зрения сервера.Однако имейте в виду, что используемый по умолчанию ключ шифрования привязан к компьютеру, поэтому вам придется использовать что-то вроде azure или redis , если вы планируете масштабирование до нескольких экземпляров сервера.

Если вы хотите иметь полную систему входа в систему и управления пользователями, возможно, самый простой способ - это идентификация ASP.net, которая предоставляет API-интерфейсы для обработки пользователей, политик, групп доступа и некоторых сложных вещей, таких как хранение паролей с использованием Entity Framework.Для получения дополнительной информации об этом, проверьте это: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.2&tabs=visual-studio


В качестве дополнительного примечания, для более общего состояния сеанса, этот документ содержит данные о других параметрах состояния сеанса,но поскольку вы спрашивали о входах в систему, лучше всего использовать API аутентификации.

...