【发布时间】:2019-08-05 08:20:34
【问题描述】:
下面的代码可以很好地从一个有效的令牌生成新的令牌,而不是一个过期的令牌。
[HttpPost]
[Route("refreshtoken")]
public async Task<IActionResult> RefreshToken()
{
var identity = User.Identity as ClaimsIdentity;
var username = identity.FindFirst("user");
if (username.Value != null)
{
var user = await _userManager.FindByNameAsync(username.Value);
var token = GenerateToken(user);
return Ok(token);
}
return BadRequest("Could not refresh token");
}
当我尝试刷新无效令牌时,我会收到错误消息NullReferenceException: Object reference not set to an instance of an object。查看了错误日志,然后username.Value == null 所以看来我无法从过期令牌中获取声明。
有没有更好的方法从过期令牌生成刷新令牌?
【问题讨论】:
-
如果token过期了,
identity.IsAuthenticated就是false,你就不能得到索赔,所以username就是null
标签: c# asp.net-core jwt asp.net-core-identity