【发布时间】:2020-06-21 07:29:26
【问题描述】:
使用 JWT 令牌,我正在为我的 .NET Core API 进行身份验证。我想知道当用户请求某个路由(例如“/refresh”)以刷新过期令牌时,我是否可以告诉我的 API 忽略令牌的到期。我知道可以通过 POST 请求提供令牌来解决它,但我希望能够在我只想识别调用用户时忽略令牌的到期。
我的代码如下所示。目前它适用于 POST 请求,但我希望能够通过标头提供过期令牌。
[AllowAnonymous]
[HttpPost("refresh")]
public async Task<IActionResult> Refresh(RefreshRequest refreshRequest)
{
// Validate refresh token
if (!_tokenService.RefreshTokenValid(refreshRequest.Refresh_Token)) {
return BadRequest("The request token is not a valid token.");
}
var tokenHandler = new JwtSecurityTokenHandler();
// Validate actual token
if (!tokenHandler.CanReadToken(refreshRequest.Token)) {
return BadRequest("The JWT token is not a valid token.");
}
// Get the user from the JWT token
var userId = _tokenService.GetUserIdFromtoken(refreshRequest.Token);
var repoUser = await _repo.GetUserById(userId);
// Map the user, generate a token and send response
var newToken = _tokenService.GenerateRefreshedJwtToken(repoUser);
var tokenUser = _mapper.Map(repoUser, new AuthRefreshedTokenUser(newToken));
return Ok(tokenUser);
}
【问题讨论】:
-
AllowAnonymous 将跳过身份验证中间件,无论您是否提供正确的令牌,当前代码有什么问题?
-
AllowAnonymous 完全忽略令牌。这意味着不会识别 ClaimsPrincipal 用户,并且必须手动完成所有操作。这是一个可能的解决方案,但不是比我现在拥有的更好的手动获取令牌的解决方案。
-
您可以创建另一个身份验证架构并设置为不验证令牌的生命周期,请参阅下面的回复
标签: c# api authentication asp.net-core jwt