Belirteç Verme
Oturum açma sırasında imzalı belirteçler oluşturun.
Belirteç Verme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Token Üretme ve Doğrulama
Şimdiye kadar token'ları doğruladınız. Şimdi onları üreteceksiniz: bir kullanıcı başarıyla oturum açtıktan sonra API'niz imzalı bir JWT oluşturur ve bunu döndürür.
Bunun temel türü, System.IdentityModel.Tokens.Jwt içindeki JwtSecurityTokenHandler türüdür.
dotnet add package System.IdentityModel.Tokens.Jwtİmzalama Anahtarı
Bir token'ı imzalamak için anahtara ihtiyacınız vardır. HS256 için doğrulayıcının kullandığı aynı simetrik gizli anahtarı yeniden kullanırsınız.
Bu gizli anahtarı kaynak denetiminin dışında tutun; anahtarı yapılandırmadan veya bir gizli bilgi deposundan yükleyin.
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(configuration["Jwt:Key"]!));SigningCredentials
SigningCredentials, anahtarı algoritmayla eşleştirir. Simetrik bir anahtar için SecurityAlgorithms.HmacSha256 kullanın.
var creds = new SigningCredentials(
key,
SecurityAlgorithms.HmacSha256);Talepleri Oluşturma
Token'a nelerin gireceğine karar verin. Her zaman bir konu (kullanıcı kimliği) ile API'nin ihtiyaç duyduğu rolleri veya verileri ekleyin.
Her token'ın tanımlanabilmesi için benzersiz bir jti ekleyin.
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Role, user.Role)
};JwtSecurityToken Oluşturma
JwtSecurityToken, vereni, hedef kitleyi, talepleri, sona erme zamanını ve imzalama kimlik bilgilerini tek bir token nesnesinde birleştirir.
var token = new JwtSecurityToken(
issuer: configuration["Jwt:Issuer"],
audience: configuration["Jwt:Audience"],
claims: claims,
notBefore: DateTime.UtcNow,
expires: DateTime.UtcNow.AddMinutes(15),
signingCredentials: creds);Dizeye Serileştirme
Token nesnesi, istemciye gönderilmeden önce kompakt header.payload.signature dize biçiminde yazılmalıdır.
var handler = new JwtSecurityTokenHandler();
string jwt = handler.WriteToken(token);
// jwt now looks like eyJhbGciOiJI...Yeniden Kullanılabilir Bir Token Hizmeti
Mantığı bir hizmet içinde kapsülleyerek denetleyicilerin düzenli kalmasını ve yapılandırmanın tek bir yerde bulunmasını sağlayın.
public class TokenService(IConfiguration config)
{
public string CreateAccessToken(AppUser user)
{
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(config["Jwt:Key"]!));
var creds = new SigningCredentials(
key, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(ClaimTypes.Role, user.Role)
};
var token = new JwtSecurityToken(
config["Jwt:Issuer"], config["Jwt:Audience"],
claims, expires: DateTime.UtcNow.AddMinutes(15),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}Oturum Açma Uç Noktasını Bağlama
Oturum açma uç noktası kimlik bilgilerini doğrular, ardından hizmeti çağırır ve token'ı istemciye döndürür.
app.MapPost("/login", (LoginDto dto, TokenService tokens) =>
{
var user = Authenticate(dto.Username, dto.Password);
if (user is null) return Results.Unauthorized();
return Results.Ok(new { accessToken = tokens.CreateAccessToken(user) });
});Simetrik ve Asimetrik İmzalama
HS256, hem imzalama hem de doğrulama için tek bir ortak gizli anahtar kullanır. RS256 ise imzalama için özel anahtar, doğrulama için genel anahtar kullanır.
Asimetrik imzalama, genel anahtarı yayımlamanıza olanak tanır; böylece diğer hizmetler imzalama gizli anahtarını hiçbir zaman elinde tutmadan token'ları doğrulayabilir.
var creds = new SigningCredentials(
new RsaSecurityKey(rsaPrivateKey),
SecurityAlgorithms.RsaSha256);Hizmeti Kaydetme
Token hizmetini bağımlılık ekleme sistemine ekleyin; böylece bu hizmet uç noktalarına ve denetleyicilere eklenebilir.
builder.Services.AddScoped<TokenService>();Token'ları Sade ve Kısa Tutma
Token üretirken uygulayabileceğiniz iki iyi yöntem vardır:
- Sade: Yalnızca API'nin ihtiyaç duyduğu talepleri ekleyin; token her istekte taşınır.
- Kısa süreli: 5 ila 15 dakikalık access token'lar, bir token sızarsa oluşacak zararı sınırlar.
expires: DateTime.UtcNow.AddMinutes(15)Hızlı Kontrol
Token üretme konusunda öğrendiklerinizi doğrulayın.
Özet
İmzalı JWT'ler ürettiniz:
SigningCredentials, anahtarınızı bir algoritmayla eşleştirir.- Bir
Claimlistesi, ardından veren, hedef kitle ve sona erme zamanı bilgilerini içeren birJwtSecurityTokenoluşturun. JwtSecurityTokenHandler.WriteToken, token'ı kompakt dize biçimine serileştirir.- Token'ları sade ve kısa süreli tutun.
Sırada refresh token'lar ve sona erme stratejileri var.
Sıkça Sorulan Sorular
“Belirteç Verme” dersi ücretsiz mi?
Evet — “Belirteç Verme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Belirteç Verme” dersinde ne öğreneceğim?
Oturum açma sırasında imzalı belirteçler oluşturun. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Belirteç Verme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- JWT Yapısı ve Talepleri
- JWT Bearer Kimlik Doğrulamasını Yapılandırma
- Belirteç Verme
- Yenileme Belirteçleri ve Süre Dolumu