source: iknow-api/Program.cs@ e49c3ed

Last change on this file since e49c3ed was e49c3ed, checked in by stefansaveski <stefansaveski19@…>, 11 months ago

Add JWT authentication and refactor namespaces

Introduced JWT-based authentication and authorization:

  • Configured JWT authentication in Program.cs with token validation.
  • Added [Authorize] attribute to a new getstring endpoint.

Refactored namespaces for consistency:

  • Updated namespaces from iknow_api.Core.* to iknow_api.*.

Enhanced middleware and dependency injection:

  • Registered IAuthService and IUserRepository.
  • Added app.UseAuthentication() and app.UseAuthorization().

Removed unused code and dependencies:

  • Deleted WeatherForecast class.
  • Cleaned up redundant imports.

Updated project dependencies to include JWT authentication library.

  • Property mode set to 100644
File size: 1.8 KB
Line 
1using System.Text;
2using iknow_api.Data;
3using iknow_api.Repositories;
4using iknow_api.Services;
5using Microsoft.AspNetCore.Authentication.JwtBearer;
6using Microsoft.EntityFrameworkCore;
7using Microsoft.IdentityModel.Tokens;
8
9var builder = WebApplication.CreateBuilder(args);
10builder.Services.AddAuthentication(options =>
11{
12 options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
13 options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
14})
15.AddJwtBearer(options =>
16{
17 options.RequireHttpsMetadata = false; // only for development
18 options.SaveToken = true;
19 options.TokenValidationParameters = new TokenValidationParameters
20 {
21 ValidateIssuer = true,
22 ValidIssuer = "iknow-api",
23
24 ValidateAudience = true,
25 ValidAudience = "iknow-api",
26
27 ValidateLifetime = true,
28
29 ValidateIssuerSigningKey = true,
30 IssuerSigningKey = new SymmetricSecurityKey(
31 Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
32 };
33});
34// Add services to the container.
35builder.Services.AddControllers();
36builder.Services.AddOpenApi();
37
38// Register DbContext
39builder.Services.AddDbContext<AppDbContext>(options =>
40 options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
41
42// Register your services
43builder.Services.AddScoped<IAuthService, AuthService>();
44builder.Services.AddScoped<IUserRepository, UserRepository>(); // You'll need to add the UserRepository implementation
45builder.Services.AddAuthorization();
46var app = builder.Build();
47
48// Configure the HTTP request pipeline.
49if (app.Environment.IsDevelopment())
50{
51 app.MapOpenApi();
52}
53
54app.UseHttpsRedirection();
55app.UseAuthentication(); // <-- must come BEFORE UseAuthorization
56app.UseAuthorization();
57app.MapControllers();
58
59app.Run();
Note: See TracBrowser for help on using the repository browser.