【发布时间】:2021-04-06 23:19:34
【问题描述】:
我有一个 Angular/.NET Core 应用程序,
我只想刷新令牌的到期时间(例如添加 1 小时),而不刷新和生成新令牌。
我可以点它还是我需要生成一个新的令牌?
这是我在对应用进行身份验证时首先生成令牌的方式:
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, loginModel.UserName),
new Claim(ClaimTypes.Rsa, company.Name),
new Claim(ClaimTypes.PrimarySid, company.Id.ToString()),
new Claim(ClaimTypes.NameIdentifier, ap.Language),
new Claim(ClaimTypes.IsPersistent, loginModel.RememberMe.ToString()),
new Claim(ClaimTypes.Expiration, loginModel.RememberMe ? DateTime.Now.AddHours(1).ToString() : DateTime.Now.AddHours(1).ToString()),
new Claim(ClaimTypes.Actor, employeeIdentifier)
}),
};
foreach (string r in Role)
{
tokenDescriptor.Subject.AddClaims(new[] { new Claim(ClaimTypes.Role, r) });
}
var token =
new JwtSecurityToken(issuer: _configuration["Token:Issuer"],
audience: _configuration["Token:Audience"],
claims: tokenDescriptor.Subject.Claims,
expires: loginModel.RememberMe ? DateTime.Now.AddHours(1) : DateTime.Now.AddHours(1),
notBefore: DateTime.Now,
signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Token:Key"])),
SecurityAlgorithms.HmacSha512));
string tokenstring = new JwtSecurityTokenHandler().WriteToken(token);
try
{
JwtKeys key = new JwtKeys()
{
jwtKey = tokenstring,
userId = ap.UserName
};
_db.Entry(key).State = EntityState.Added;
_db.SaveChanges();
}
有什么帮助吗?谢谢
【问题讨论】:
-
更改令牌中的任何内容实际上意味着创建一个新令牌。令牌已签名,负载的任何更改都会使签名无效,因此需要再次签名,因此最好的方法是使用刷新令牌。
-
@jps 谢谢,你能给我任何简单的实现刷新令牌的例子吗?
标签: angular asp.net-core jwt