diff --git a/TaxBaik.Web/Program.cs b/TaxBaik.Web/Program.cs index d9d98d0..19a2382 100644 --- a/TaxBaik.Web/Program.cs +++ b/TaxBaik.Web/Program.cs @@ -1,8 +1,11 @@ using System.IO.Compression; +using System.Text; using System.Text.Encodings.Web; using System.Text.Unicode; +using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.ResponseCompression; +using Microsoft.IdentityModel.Tokens; using MudBlazor.Services; using TaxBaik.Application; using TaxBaik.Infrastructure; @@ -14,6 +17,26 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddRazorComponents().AddInteractiveServerComponents(); +// JWT 인증 +var jwtKey = builder.Configuration["Jwt:SecretKey"] ?? throw new InvalidOperationException("Missing JWT SecretKey"); +var key = Encoding.ASCII.GetBytes(jwtKey); + +builder.Services.AddAuthentication(opts => +{ + opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; + opts.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; +}) +.AddJwtBearer(opts => +{ + opts.TokenValidationParameters = new TokenValidationParameters + { + ValidateIssuerSigningKey = true, + IssuerSigningKey = new SymmetricSecurityKey(key), + ValidateIssuer = false, + ValidateAudience = false + }; +}); + // Blazor 인증 builder.Services.AddScoped(); builder.Services.AddScoped(); @@ -74,6 +97,7 @@ app.UsePathBase("/taxbaik"); app.UseResponseCompression(); app.UseStaticFiles(); app.UseRouting(); +app.UseAuthentication(); app.UseAuthorization(); app.UseAntiforgery(); diff --git a/TaxBaik.Web/TaxBaik.Web.csproj b/TaxBaik.Web/TaxBaik.Web.csproj index 7614ead..92fa684 100644 --- a/TaxBaik.Web/TaxBaik.Web.csproj +++ b/TaxBaik.Web/TaxBaik.Web.csproj @@ -16,6 +16,7 @@ +