新しいアプリケーションでMVCからSPA + APIへアプローチしています。私はその答えを見つけることができないいくつかの質問に直面しています。.NET Core 2 Web APIでJWTを検証した後、ユーザーデータを取得するベストプラクティスは何ですか?
ユーザーストアにIDを使用している.Net Core 2のWeb APIがあります。私は、私のSPAがコントローラへのすべての要求に対してベアラトークンとして送信しているJWTトークンを発行してAPIを保護しています。発行コードは次のとおりです。
private async Task<object> GenerateJwtTokenAsync(ApplicationUser user)
{
var roles = await _userManager.GetRolesAsync(user);
var claims = new List<Claim>
{
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<IEnumerable<Agreement>> GetAgreementsAsync()
{
var user = await _userManager.GetUserAsync(HttpContext.User);
return _context.Agreements.Where(x => x.CompanyId == user.CompanyId);
}
各リクエストでこの情報を取得するには、もう一度DBを調べる必要がありますか?この情報をJWTトークンに入れるべきか、その場合、どのフィールドに "カスタム"情報を入れるべきですか?