JWT'yi kullanan asp.net çekirdeğini kullanarak bir web API uygulaması aşamasındayım. Öğrenmeye çalıştığım gibi IdentityServer4 gibi üçüncü taraf bir çözüm kullanmıyorum.JWT Yenileme Jetonları asp.net core web api'de (3. taraf) nasıl uygulanır?
Çalışmak için JWT yapılandırmasını aldım, ancak JWT'nin süresi dolduğunda yenileme jetonlarını nasıl uygulayacağımı anladım.
Aşağıda, Configure yöntemimde startup.cs içinde bulunan bazı örnek kodlar yer almaktadır.
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
}
});
Aşağıda, JWT'yi oluşturmak için kullanılan Denetleyici yöntemi verilmiştir. Test amaçları için son kullanma tarihi 30 saniyeye ayarlıyorum.
[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.");
}
Bazı yönlendirme için çok minnettar olurdum.
kodu belirteçleri yenilemez erişim belirteçleri kimlik doğrulaması için de uygundur: Aşağıdaki
mutlu yolu için sözde kodudur. Erişim belirteçleri oluşturduğunuz kodu paylaşabilir misiniz? – naslund
Elbette, JWT'leri oluşturmak için kullanılan kodu ekledim. – DJDJ