diff --git a/Back.csproj b/Back.csproj
index fc3d551..f591412 100644
--- a/Back.csproj
+++ b/Back.csproj
@@ -18,9 +18,5 @@
-
-
-
-
diff --git a/Program.cs b/Program.cs
index c2501c8..3399e82 100644
--- a/Program.cs
+++ b/Program.cs
@@ -14,6 +14,7 @@ using System.Text.Json;
using AcaMate.Common.Models;
using AcaMate.V1.Services;
using AcaMate.Common.Data;
+using AcaMate.Common.Token;
using AcaMate.V1.Controllers;
using AcaMate.V1.Models;
@@ -149,10 +150,13 @@ else
builder.Logging.SetMinimumLevel(LogLevel.Warning);
}
+//헤더 부분
+builder.Services.AddScoped();
+
// 로컬 테스트 위한 부분 (올릴때는 꺼두기)
-// builder.WebHost.UseUrls("http://0.0.0.0:5144");
+builder.WebHost.UseUrls("http://0.0.0.0:5144");
///// ===== builder 설정 부 ===== /////
@@ -172,7 +176,14 @@ else
}
// 로컬 테스트 위한 부분 (올릴떄는 켜두기)
-app.UseHttpsRedirection();
+// app.UseHttpsRedirection();
+
+// 헤더 미들웨어 부분
+app.UseMiddleware("HEAD-CHECK");
+
+// 이부분 봐야 합니다.
+// app.UseMiddleware("X-MyHeader");
+
app.UseRouting();
// app.MapControllers();
diff --git a/Program/Common/Auth/APIHeaderFilter.cs b/Program/Common/Auth/APIHeaderFilter.cs
new file mode 100644
index 0000000..766fba0
--- /dev/null
+++ b/Program/Common/Auth/APIHeaderFilter.cs
@@ -0,0 +1,27 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+
+
+namespace AcaMate.Common.Token;
+
+public class APIHeaderFilter : ActionFilterAttribute
+{
+ private readonly string _headerName;
+
+ public APIHeaderFilter(string headerName)
+ {
+ _headerName = headerName;
+ }
+
+ public override void OnActionExecuted(ActionExecutedContext context)
+ {
+ if (!context.HttpContext.Request.Headers.TryGetValue(_headerName, out var headerValues) ||
+ string.IsNullOrWhiteSpace(headerValues))
+ {
+ context.Result = new BadRequestObjectResult($"Missing or empty header: {_headerName}");
+ }
+
+ base.OnActionExecuted(context);
+ }
+
+}
\ No newline at end of file
diff --git a/Program/Common/Auth/APIHeaderMiddle.cs b/Program/Common/Auth/APIHeaderMiddle.cs
new file mode 100644
index 0000000..7d5fcc2
--- /dev/null
+++ b/Program/Common/Auth/APIHeaderMiddle.cs
@@ -0,0 +1,65 @@
+using System.Threading.Tasks;
+using AcaMate.Common.Data;
+using Microsoft.AspNetCore.Http;
+using Microsoft.EntityFrameworkCore;
+
+namespace AcaMate.Common.Token;
+public interface IHeaderConfig
+{
+ Task GetExpectedHeaderValueAsync(string headerName);
+}
+
+public class HeaderConfigRepository : IHeaderConfig
+{
+ private readonly AppDbContext _dbContext;
+
+ public HeaderConfigRepository(AppDbContext dbContext)
+ {
+ _dbContext = dbContext;
+ }
+
+ public async Task GetExpectedHeaderValueAsync(string headerName)
+ {
+ // 예를 들어, HeaderConfig 테이블에 헤더 이름과 기대 값이 저장되어 있다고 가정합니다.
+ var config = await _dbContext.APIHeader.
+ FirstOrDefaultAsync(h => h.h_key == headerName);
+ return config?.h_value ?? string.Empty;
+ }
+}
+
+
+public class APIHeaderMiddle
+{
+
+ private readonly RequestDelegate _next;
+ private readonly string _headerName;
+ private readonly IHeaderConfig _headerConfig;
+
+ public APIHeaderMiddle(RequestDelegate next, string headerName, IHeaderConfig headerConfig)
+ {
+ _next = next;
+ _headerName = headerName;
+ _headerConfig = headerConfig;
+ }
+
+ public async Task Invoke(HttpContext context)
+ {
+ var expectedValue = await _headerConfig.GetExpectedHeaderValueAsync(_headerName);
+
+ if (!context.Request.Headers.TryGetValue(_headerName,out var headerValue) || string.IsNullOrWhiteSpace(headerValue))
+ // if (!context.Request.Headers.ContainsKey(_headerName) || string.IsNullOrWhiteSpace(context.Request.Headers[_headerName]))
+ {
+ context.Response.StatusCode = StatusCodes.Status400BadRequest;
+ await context.Response.WriteAsync($"Missing or empty header: {_headerName}");
+ return;
+ }
+
+ if (headerValue != expectedValue)
+ {
+ context.Response.StatusCode = StatusCodes.Status401Unauthorized;
+ await context.Response.WriteAsync($"Invalid header value");
+ return;
+ }
+ await _next(context);
+ }
+}
\ No newline at end of file
diff --git a/Program/Common/Data/AppDbContext.cs b/Program/Common/Data/AppDbContext.cs
index dd2a32a..08a5c95 100644
--- a/Program/Common/Data/AppDbContext.cs
+++ b/Program/Common/Data/AppDbContext.cs
@@ -11,6 +11,9 @@ public class AppDbContext: DbContext
{
}
+ //MARK: API
+ public DbSet APIHeader { get; set; }
+
//MARK: Program
public DbSet Version { get; set; }
public DbSet Academy { get; set; }
diff --git a/Program/Common/Model/APISetting.cs b/Program/Common/Model/APISetting.cs
new file mode 100644
index 0000000..e26c6fd
--- /dev/null
+++ b/Program/Common/Model/APISetting.cs
@@ -0,0 +1,19 @@
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+namespace AcaMate.Common.Models;
+
+[Table("api_header")]
+public class APIHeader
+{
+ [Key]
+ public string h_key { get; set; }
+ public string h_value { get; set; }
+}
+
+/*
+ h_key : h_value
+ iOS_AM_Connect_Key
+ And_AM_Connect_Key
+ Web_AM_Connect_Key
+*/
\ No newline at end of file