我正在做一个小型的副项目API,我想实现JWT身份验证。我已经用JWT制作了一些API,并且总是定制实现和验证。
这一次,我想使用
身份/实体框架
走得更快,并使用已经为我制作的工具。
在执行GenerateToken方法并浏览互联网时,我注意到IdentityFramework创建的许多表都没有使用。我开始对
AspNetUserToken
.
我注意到,而不是
private object GenerateToken(IdentityUser user)
{
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.UTF8.GetBytes(ApiConfig.JwtSecretKey);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Email, user.Email),
}),
Expires = DateTime.UtcNow.AddSeconds(double.Parse(ApiConfig.JwtExp)), //TODO: Try parse
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
Audience = ApiConfig.JwtAudience,
Issuer = ApiConfig.JwtIssuer
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
我用来生成一个新的JWT令牌,添加声明、发行人、受众等……可以用以下内容替换:
//Removes existing token
_userManager.RemoveAuthenticationTokenAsync(user, "lboard", "login");
//Creates a new one
var newToken = await _userManager.GenerateUserTokenAsync(user, "lboard", "login");
//Set the new token for the user
await _userManager.SetAuthenticationTokenAsync(user, "lboard", "login", newToken);
我想知道这两种方法之间的区别,以及使用自定义实现是否有任何好处,或者我是否更适合使用IdentityFramework实现。