From d9166469f733f1c4ed951fcc335ece4de06f4a3f Mon Sep 17 00:00:00 2001 From: "Seonkyu.kim" Date: Mon, 19 May 2025 15:43:28 +0900 Subject: [PATCH] =?UTF-8?q?[=E2=9C=A8]=20Front=20=EB=B9=8C=EB=93=9C=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 22 ++++++++++ Program/Common/Auth/APIHeaderMiddleware.cs | 51 +++++++++++++--------- 2 files changed, 52 insertions(+), 21 deletions(-) diff --git a/Program.cs b/Program.cs index 5fa9a9c..c80148c 100644 --- a/Program.cs +++ b/Program.cs @@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.DependencyInjection; using System.Net.Http; @@ -23,6 +24,7 @@ using Back.Program.Services.V1; using Back.Program.Services.V1.Interfaces; + var builder = WebApplication.CreateBuilder(args); @@ -174,6 +176,7 @@ else ///// ===== builder 설정 부 ===== ///// var app = builder.Build(); +string staticRoot; if (app.Environment.IsDevelopment()) { @@ -181,11 +184,13 @@ if (app.Environment.IsDevelopment()) // app.UseSwaggerUI(); app.UseCustomSwaggerUI(); app.UseDeveloperExceptionPage(); // 좀더 자세한 예외 정보 제공 + staticRoot = Path.Combine(Directory.GetCurrentDirectory(), "publish", "debug", "wwwroot"); } else { app.UseExceptionHandler("/error"); app.UseHsts(); + staticRoot = Path.Combine(Directory.GetCurrentDirectory(), "publish", "release", "wwwroot"); } // 로컬 테스트 위한 부분 (올릴떄는 켜두기) @@ -198,14 +203,31 @@ app.UseMiddleware( (object)new string[] { "iOS_AM_Connect_Key", "And_AM_Connect_Key", "Web_AM_Connect_Key" } ); +// app.UseBlazorFrameworkFiles(); +// app.UseStaticFiles(); + +app.UseStaticFiles(new StaticFileOptions +{ + FileProvider = new PhysicalFileProvider(staticRoot), + RequestPath = "" +}); + + + + app.UseRouting(); app.UseCors("CorsPolicy"); app.UseAuthorization(); app.UseWebSockets(); + app.UseEndpoints(end => { ControllerEndpointRouteBuilderExtensions.MapControllers(end); + + // 프론트 테스트 위한 부분 + end.MapFallbackToFile("index.html"); + end.MapHub("/chatHub"); }); diff --git a/Program/Common/Auth/APIHeaderMiddleware.cs b/Program/Common/Auth/APIHeaderMiddleware.cs index 6b268a8..a4a26fb 100644 --- a/Program/Common/Auth/APIHeaderMiddleware.cs +++ b/Program/Common/Auth/APIHeaderMiddleware.cs @@ -7,12 +7,11 @@ namespace Back.Program.Common.Auth /// public class APIHeaderMiddleware { - private readonly RequestDelegate _next; private readonly string[] _headerNames; // private readonly IHeaderConfig _headerConfig; - public APIHeaderMiddleware(RequestDelegate next, string[] headerNames)//, IHeaderConfig headerConfig) + public APIHeaderMiddleware(RequestDelegate next, string[] headerNames) //, IHeaderConfig headerConfig) { _next = next; _headerNames = headerNames; @@ -25,36 +24,46 @@ namespace Back.Program.Common.Auth await _next(context); return; } - - // Scoped 사용해서 값 가져오는 곳임 - var headerConfig = context.RequestServices.GetRequiredService(); - - bool valid = false; - foreach (var header in _headerNames) + // 정적 파일 요청은 미들웨어 건너뜀 + var path = context.Request.Path.Value; + if (path != null && (path.StartsWith("/api"))) { - /// context.Request.Headers.TryGetValue(header, out var headerValue) - /// header 를 찾는데 header - if (context.Request.Headers.TryGetValue(header, out var headerValue) && - !string.IsNullOrWhiteSpace(headerValue)) + // Scoped 사용해서 값 가져오는 곳임 + var headerConfig = context.RequestServices.GetRequiredService(); + + bool valid = false; + + foreach (var header in _headerNames) { - var keyName = await headerConfig.GetExpectedHeaderValueAsync(headerValue); - if (keyName != string.Empty) + /// context.Request.Headers.TryGetValue(header, out var headerValue) + /// header 를 찾는데 header + if (context.Request.Headers.TryGetValue(header, out var headerValue) && + !string.IsNullOrWhiteSpace(headerValue)) { - valid = true; - break; + var keyName = await headerConfig.GetExpectedHeaderValueAsync(headerValue); + if (keyName != string.Empty) + { + valid = true; + break; + } } } + + if (!valid) + { + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + await context.Response.WriteAsync($"Invalid header value"); + return; + } + + await _next(context); } - if (!valid) { - context.Response.StatusCode = StatusCodes.Status401Unauthorized; - await context.Response.WriteAsync($"Invalid header value"); + await _next(context); return; } - - await _next(context); } } } \ No newline at end of file