.NET Core JWT Token Kullanımı

Ahmet ÖZBEY
2 min readMar 5, 2021

Merhabalar bu yazıda .net core projesinde JWT Token oluşturmayı anlatacağım.

JWT(Json Web Token) OAuth protokolü ile json formatında veri alış verişi yapılırken kullanılan bir token mekanizmasıdır.

Bu token mekanizmasını kullanarak kullanıcıdan 1 kere kullanıcı adı şifre bilgisini alıp kullanıcı adı şifre doğrulaması sonucunda bir token üretebilirsiniz ve üretilen bu token kullanılarak api içerisindeki diğer servislere kullanıcı adı şifre gerektirmeden oluşturulan token Authentication sağlayabilirsiniz.

Öncelikli olarak projenize aşağıdaki Nuget i eklemeniz gerekmektedir.

https://www.nuget.org/packages/NetCore.Jwt/

Bu aşamadan sonra Startup.cs içerisinde ConfigureServices içerisine aşağıdaki kod bloğunu eklemeniz gerekmektedir.

string jwtKey = Configuration["Authentication:JwtKey"];services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(jwtBearerOptions =>
{
jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false, //Gets or sets a boolean to control if the issuer will be validated during token validation.
ValidateAudience = false,//Gets or sets a boolean to control if the audience will be validated during token validation.
ValidateLifetime = true,//Gets or sets a boolean to control if the lifetime will be validated during token validation.
ValidateIssuerSigningKey = true,//Gets or sets a boolean that controls if validation of the SecurityKey that signed the securityToken is called.
IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String(jwtKey)),//Gets or sets the SecurityKey that is to be used for signature validation.
ClockSkew = TimeSpan.FromSeconds(5)//Gets or sets the clock skew to apply when validating a time.
};
});

Daha sonra Configure metodu içerisine aşağıdaki kod bloğunu eklemeniz gerekmektedir.

app.UseAuthentication();

Startup.cs içerisinde gerekli ayarlamaları yaptıktan sonra ise JWT Token için gerekli olan Interface ve Class tanımını yapmanız gerekmektedir.

IJWTService

public interface IJWTService
{
string GetToken(string userName, string password);
}

JWTService

using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using WebApi.Business.Interface;
namespace WebApi.Business.Implementation
{
public class JWTService : IJWTService
{
private readonly IConfiguration _configuration;
public JWTService(IConfiguration configuration)
{
_configuration = configuration;
}
public string GetToken(string userName, string password)
{
Claim[] claims;
claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, userName),
new Claim(JwtRegisteredClaimNames.Sub, password)
};
var key = new SymmetricSecurityKey(Convert.FromBase64String(_configuration["Authentication:JwtKey"])); var token = new JwtSecurityToken(
claims: claims,
expires: DateTime.UtcNow.AddDays(1),//1 day will be valid.
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
}

Bu işlemleri yapıktan sonra son adım olarak appsettings.json içerisine bir JWT key generale edip aşağıdaki kod bloğunda olduğu şekli ile eklemeniz gerekmektedir.

"Authentication": { "JwtKey": "Generate Edilen Key" }

Artık gerekli doğrulamalar yapıldıktan sonra bu servisi kullanarak token üretebilirsiniz ve kullanıcılarınız bu token ı kullarak api üzerinde işlemlerini gerçekleştirebilir.

Token doğrulaması yapılacak metodların başına aşağıdaki attribute u eklemeniz gerekmektedir.

[Authorize]
[HttpGet]
public IActionResult TestMethod()
{
// method implementation
}

Bu servisi çağırırken oluşturmuş olduğunuz token bilgisini header içerisine eklemeniz gerekmektedir. Header içerisine eklerken aşağıdaki key ve value bilgilerini eklemeniz gerekmektedir.

Key   : Authorization
Value : BearerOluşturulan Token

Bu adımları uygulayarak JWT Token mekanizmasını kullanabilirsiniz.

--

--