chore: useBasePath("/api") & better local forwarded headers

refactor from workaround hack to idempotent solution
This commit is contained in:
2023-12-27 16:25:08 +01:00
parent c1cd056495
commit ea5bdd7f1e
4 changed files with 28 additions and 11 deletions
@@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Mvc;
namespace Kemkas.Web.Controllers; namespace Kemkas.Web.Controllers;
[ApiController] [ApiController]
[Route("api/[controller]")] [Route("[controller]")]
public class CharacterController( public class CharacterController(
ICharacterValidationService validationService, ICharacterValidationService validationService,
ICharacterDtoToDbModelService dtoToDbModelService, ICharacterDtoToDbModelService dtoToDbModelService,
+1 -1
View File
@@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Mvc;
namespace Kemkas.Web.Controllers; namespace Kemkas.Web.Controllers;
[Route("api/[controller]")] [Route("[controller]")]
[ApiController] [ApiController]
public class UserController : ControllerBase public class UserController : ControllerBase
{ {
+14 -3
View File
@@ -1,3 +1,4 @@
using System.Net;
using System.Text.Encodings.Web; using System.Text.Encodings.Web;
using System.Text.Unicode; using System.Text.Unicode;
using Kemkas.Web.Config; using Kemkas.Web.Config;
@@ -7,7 +8,9 @@ using Kemkas.Web.Db.Models;
using Kemkas.Web.Services.Character; using Kemkas.Web.Services.Character;
using Kemkas.Web.Services.Identity; using Kemkas.Web.Services.Identity;
using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.AspNetCore.Identity.UI.Services;
using IPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container. // Add services to the container.
@@ -42,11 +45,21 @@ builder.Services.AddRazorPages();
builder.Services.AddCharacterServices(); builder.Services.AddCharacterServices();
var app = builder.Build(); var app = builder.Build();
app.UsePathBase("/api");
// Configure the HTTP request pipeline. // Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) if (app.Environment.IsDevelopment())
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedForHeaderName = "X-Forwarded-For",
ForwardedHostHeaderName = "X-Forwarded-Host",
ForwardedProtoHeaderName = "X-Forwarded-Proto",
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedProto,
KnownNetworks = { new IPNetwork(new IPAddress([0,0,0,0]), 0) }
});
app.UseMigrationsEndPoint(); app.UseMigrationsEndPoint();
app.UseDeveloperExceptionPage();
} }
else else
{ {
@@ -60,8 +73,6 @@ await using (var scope = app.Services.CreateAsyncScope())
await db.Database.MigrateAsync(); await db.Database.MigrateAsync();
} }
app.UseForwardedHeaders();
app.UseStaticFiles(); app.UseStaticFiles();
app.UseRouting(); app.UseRouting();
@@ -70,7 +81,7 @@ app.UseAuthorization();
app.MapControllerRoute( app.MapControllerRoute(
name: "default", name: "default",
pattern: "/api/{controller}/{action=Index}/{id?}"); pattern: "/{controller}/{action=Index}/{id?}");
app.MapRazorPages(); app.MapRazorPages();
app.MapFallbackToFile("index.html"); app.MapFallbackToFile("index.html");
+11 -5
View File
@@ -57,7 +57,18 @@ http {
} }
location /Identity/ { location /Identity/ {
proxy_pass_request_headers on;
proxy_set_header X-Forwarded-For "$proxy_add_x_forwarded_for";
proxy_set_header X-Forwarded-Proto "$scheme";
proxy_set_header X-Forwarded-Host "$http_host";
proxy_pass https://backend;
}
location /api/ {
proxy_pass_request_headers on;
proxy_set_header X-Forwarded-For "$proxy_add_x_forwarded_for";
proxy_set_header X-Forwarded-Proto "$scheme";
proxy_set_header X-Forwarded-Host "$http_host";
proxy_pass https://backend; proxy_pass https://backend;
proxy_pass_request_headers on; proxy_pass_request_headers on;
} }
@@ -74,10 +85,5 @@ http {
proxy_pass https://backend; proxy_pass https://backend;
proxy_pass_request_headers on; proxy_pass_request_headers on;
} }
location /api/ {
proxy_pass https://backend;
proxy_pass_request_headers on;
}
} }
} }