Tôi đang trong quá trình triển khai api trên web bằng cách sử dụng lõi asp.net đang sử dụng JWT. Tôi không sử dụng giải pháp của bên thứ ba như IdentityServer4 như tôi đang cố gắng tìm hiểu.Làm cách nào để triển khai JWT Refresh Tokens trong api core asp.net core (không có bên thứ 3)?
Tôi đã nhận cấu hình JWT để hoạt động, nhưng tôi đã bị vướng vào cách triển khai mã thông báo làm mới khi thời gian JWT hết hạn.
Dưới đây là một số mã mẫu trong phương thức Cấu hình của tôi bên trong startup.cs.
app.UseJwtBearerAuthentication(new JwtBearerOptions()
{
AuthenticationScheme = "Jwt",
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = new TokenValidationParameters()
{
ValidAudience = Configuration["Tokens:Audience"],
ValidIssuer = Configuration["Tokens:Issuer"],
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])),
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
}
});
Dưới đây là phương pháp Bộ điều khiển được sử dụng để tạo JWT. Tôi đã đặt hết hạn 30 giây cho mục đích thử nghiệm.
[Route("Token")]
[HttpPost]
public async Task<IActionResult> CreateToken([FromBody] CredentialViewModel model)
{
try
{
var user = await _userManager.FindByNameAsync(model.Username);
if (user != null)
{
if (_hasher.VerifyHashedPassword(user, user.PasswordHash, model.Password) == PasswordVerificationResult.Success)
{
var userClaims = await _userManager.GetClaimsAsync(user);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
}.Union(userClaims);
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwt.Key));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _jwt.Issuer,
audience: _jwt.Audience,
claims: claims,
expires: DateTime.UtcNow.AddSeconds(30),
signingCredentials: creds
);
return Ok(new
{
access_token = new JwtSecurityTokenHandler().WriteToken(token),
expiration = token.ValidTo
});
}
}
}
catch (Exception)
{
}
return BadRequest("Failed to generate token.");
}
Sẽ rất biết ơn vì một số hướng dẫn.
Mã bạn đăng là chỉ liên quan đến chứng thực thẻ truy cập, không làm mới thẻ. Bạn có thể chia sẻ mã nơi bạn tạo mã thông báo truy cập không? – naslund
Chắc chắn, tôi đã thêm mã được sử dụng để tạo các JWT. – DJDJ