У меня есть веб-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);
}
Подробнее: https://stackoverflow.com/questions/479 ... -in-net-co