Как лучше всего получать данные пользователя после проверки JWT в .NET Core 2 Web Api?C#

Место общения программистов C#
Anonymous
Как лучше всего получать данные пользователя после проверки JWT в .NET Core 2 Web Api?

Сообщение Anonymous »

Я перехожу от MVC к подходу SPA + API в новом приложении, которое создаю, и столкнулся с некоторыми вопросами, на которые не могу найти ответа.

У меня есть веб-API в .Net Core 2, который использует Identity для своего хранилища пользователей. Я защищаю API, выпуская JWT-токены, которые мой SPA отправляет в качестве токена-носителя при каждом запросе к моим контроллерам. Код выдачи:

Код: Выделить всё

    private async Task GenerateJwtTokenAsync(ApplicationUser user)
{
var roles = await _userManager.GetRolesAsync(user);

var claims = new List
{
new Claim(JwtRegisteredClaimNames.Sub, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, user.Id)
};
claims.AddRange(roles.Select(role => new Claim(ClaimTypes.Role, role)));

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtKey"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var expires = DateTime.Now.AddDays(Convert.ToDouble(_configuration["JwtExpireDays"]));

var token = new JwtSecurityToken(
_configuration["JwtIssuer"],
_configuration["JwtIssuer"],
claims,
expires: expires,
signingCredentials: creds
);

return new JwtSecurityTokenHandler().WriteToken(token);
}
Мой вопрос: как лучше всего получить информацию о пользователе, необходимую для обслуживания запроса в контроллере?

Пока я получаю JWT-токен, у меня есть информация о пользователе, но расширенная информация о пользователе, например о том, в какой компании он работает, находится в моей базе данных SQL.

Код: Выделить всё

// GET: api/Agreements
[HttpGet]
public async Task GetAgreementsAsync()
{
var user = await _userManager.GetUserAsync(HttpContext.User);

return _context.Agreements.Where(x => x.CompanyId == user.CompanyId);
}
Нужно ли мне еще раз обращаться к БД, чтобы получать эту информацию по каждому запросу? Следует ли помещать эту информацию в JWT-токен, и в каком случае в каком поле следует помещать «пользовательскую» информацию?

Подробнее: https://stackoverflow.com/questions/479 ... -in-net-co

Вернуться в «C#»