I followed the sample project bff react on our project. Our project is an asp.net core web application (.net8) with spa (react and vite). On local development environment it is working fine. After deploying project to folder homepage gives me HTTP 404 error.
Code changes on Program.cs
builder.Services.AddBff();
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultSignOutScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
//strict SameSite Handling
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Strict;
options.Cookie.Name = "__dmmService-bff";
}).AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Authority = iamAuthConfig.Authority;
options.ClientId = iamAuthConfig.ClientId;
options.ClientSecret = iamAuthConfig.ClientSecret;
options.ResponseType = OpenIdConnectResponseType.Code;
options.ResponseMode = OpenIdConnectResponseMode.Query;
options.GetClaimsFromUserInfoEndpoint = true;
options.MapInboundClaims = false;
options.SaveTokens = true;
options.DisableTelemetry = true;
options.Scope.Clear();
foreach (var scope in iamAuthConfig.Scopes.Split(" "))
{
options.Scope.Add(scope);
}
options.TokenValidationParameters = new()
{
NameClaimType = "name",
RoleClaimType = "role"
};
}).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.SaveToken = true;
})
builder.Services.AddAuthorizationBuilder().AddPolicy(....);
if (environment.IsDevelopment())
{
app.UseDefaultFiles();
app.UseStaticFiles();
}
//it was already there
app.UseRouting();
app.UseAuthentication();
//new added
app.UseBff();
//it was already there
app.UseAuthorization();
//new added
app.MapBffManagementEndpoints();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute().RequireAuthorization();
});
app.MapFallbackToFile("/index.html");
`
I changed the orders of middleware and deleted some unnecessary parts like app.MapFallbackToFile("/index.html"); Now it is working. Working Program.cs below:
builder.Services.AddBff();
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultSignOutScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
//strict SameSite Handling
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Strict;
options.Cookie.Name = "__dmmService-bff";
}).AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Authority = iamAuthConfig.Authority;
options.ClientId = iamAuthConfig.ClientId;
options.ClientSecret = iamAuthConfig.ClientSecret;
options.ResponseType = OpenIdConnectResponseType.Code;
options.ResponseMode = OpenIdConnectResponseMode.Query;
options.GetClaimsFromUserInfoEndpoint = true;
options.MapInboundClaims = false;
options.SaveTokens = true;
options.DisableTelemetry = true;
options.Scope.Clear();
foreach (var scope in iamAuthConfig.Scopes.Split(" "))
{
options.Scope.Add(scope);
}
options.TokenValidationParameters = new()
{
NameClaimType = "name",
RoleClaimType = "role"
};
}).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.SaveToken = true;
})
builder.Services.AddAuthorizationBuilder().AddPolicy(....);
app.UseBff();
app.MapBffManagementEndpoints();