JSON Web Tokens (JWT) are used for securely transmitting information between parties as a JSON object. JWT is typically used for authentication and authorization. In this article, I'll walk you through how to implement JWT authentication in an ASP.NET Core Web API.
Steps to Implement JWT Token-Based Authentication
Create an ASP.NET Core Web API Project
- Open Visual Studio and create a new project.
- Select ASP.NET Core Web API template.
- Configure the project as per your requirements and click Create
Install Required NuGet Packages
- To implement JWT, you will need the following NuGet package.
- Microsoft.AspNetCore.Authentication.JwtBearer
- Install it via NuGet Package Manager
- 3. Configure JWT in appsettings.json
- In your appsettings.json, configure the JWT settings.
{ "JwtSettings": { "SecretKey": "wvFwnwxh7GucmY898kQdKzEU5TjE18SQ", // Use a strong secret key "Issuer": "yourdomain.com", "Audience": "yourdomain.com", "ExpiryInMinutes": 60 } }
Create a JWT Helper Class
Create a helper class that will be responsible for generating the JWT token.
public class JwtTokenHelper
{
private readonly IConfiguration _configuration;
public JwtTokenHelper(IConfiguration configuration)
{
_configuration = configuration;
}
public string GenerateToken(string username)
{
var secretKey = Encoding.ASCII.GetBytes(_configuration["JwtSettings:SecretKey"]);
var tokenHandler = new JwtSecurityTokenHandler();
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, username)
}),
Expires = DateTime.UtcNow.AddMinutes(int.Parse(_configuration["JwtSettings:ExpiryInMinutes"])),
Issuer = _configuration["JwtSettings:Issuer"],
Audience = _configuration["JwtSettings:Audience"],
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(secretKey), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
}
Configure JWT Authentication in Startup.cs or Program.cs.
In Program.cs, you need to configure JWT authentication in the builder. Services and middleware pipeline. Here's the step-by-step process.
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
// Add the JWT Bearer definition to Swagger
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme. \r\n\r\n " +
"Enter 'Bearer' [space] and then your token in the text input below.\r\n\r\n" +
"Example: \"Bearer 12345abcdef\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement()
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
},
Scheme = "oauth2",
Name = "Bearer",
In = ParameterLocation.Header
},
new List<string>()
}
});
});
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["JwtSettings:Issuer"],
ValidAudience = builder.Configuration["JwtSettings:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8


Join the conversation! Your thoughts help the community grow.