.Net Core ile JWT Token Kullanımı ve JWT Token Nedir?

JWT (JSON Web Tokens). WebApi ile mobil, IOT veya single page web projelerinde kullanıcı doğrulama, kullanıcı tanıma, veri bütünlüğünü ve bilgi güvenliğini koruma gibi noktalarda kullanılmakta.

Neden JWT ?

  • JSON kullanması
  • URL üzerinde taşınabilmesi
  • Web çerezleri kullanma zorunluluğu olmaması
  • CSRF ataklarına karşı daha kapalı olması
  • Hızlı doğrulama yapılabilmesi
  • Kolay ölçeklenebilir olması
  • Web uygulamaları açısından HTTP session gerekmemesi, stateless kullanıma uygun olması
  • Veri bütünlüğünü sağlaması

JWT Neden Güvenli ?

  • JWT, Base64 olarak şifrelenir
  • HASH256 kripto algoritması kullanılır
  • 3 Bölümden Oluşur

Header: bölümünde; hangi token türünün ve şifreleme algoritmasının kullanıldığı bilgisi yer alır.

Payload; uygulama bazlı bilgilerin yer aldığı(claim,userId vs.) yani uygulamaya özel bölümdür.

Signature ise adından da anlaşıldığı gibi server tarafından üretilen signature’ın bulunduğu bölümdür.

JWT (Json web token) projesi oluşturalım

 dotnet new webapi -o JwtExample 

console ekranına code . yazarak projeyi açalım

Startup.cs Ayarları


public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(jwtBearerOptions =>
    {
        jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters()
        {
            ValidateActor = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = Configuration["Issuer"],
            ValidAudience = Configuration["Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SigningKey"]))
        };
    });
    services.AddMvc();
}



public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseAuthentication();
    app.UseMvc();
}

TokenController.cs

[AllowAnonymous]
[HttpPost]
[Route("token")]
public IActionResult Post([FromBody]LoginRequest request)
{
    if (ModelState.IsValid)
    {
        var user = _userService.Get(request.UserName, request.Password); 
        if (user == null)
        {
            return Unauthorized();
        }
 
        var claims = new[]
        {
            new Claim(JwtRegisteredClaimNames.Sub, request.Username),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        };
 
        var token = new JwtSecurityToken
        (
            issuer: _configuration["Issuer"], //appsettings.json içerisinde bulunan issuer değeri
            audience: _configuration["Audience"],//appsettings.json içerisinde bulunan audince değeri
            claims: claims,
            expires: DateTime.UtcNow.AddDays(30), // 30 gün geçerli olacak
            notBefore: DateTime.UtcNow,
            signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SigningKey"])),//appsettings.json içerisinde bulunan signingkey değeri
                    SecurityAlgorithms.HmacSha256)
        );
        return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
    }
    return BadRequest();
}
 
public class LoginRequest
{
    public string UserName {get;set;}
    public string Password {get;set;}
}

ValueContoller.cs

[Authorize]
[Route("api/[controller]")] 
public class ValuesController : Controller
{
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

“.Net Core ile JWT Token Kullanımı ve JWT Token Nedir?” için bir yorum

  1. ValueContoller.cs sayfasında token nasıl çalışacak hocam.
    Normal bir method işlemi var. ?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir