Ich habe ein .NET 9.0-Projekt, das YARP verwendet, um den Proxy auf unsere alte ASP.NET Framework-Website umzukehren. Die Authentifizierung erfolgt auf der alten Website, daher verwenden wir auch Webadapter, um die Authentifizierung auf der .NET 9.0-Website zu implementieren. Wir möchten vermeiden, dass Webadapter unnötige Authentifizierungsanfragen an die YARP-Fallback-Route stellen. Deshalb haben wir diese Richtlinien befolgt und den Parameter isDefaultScheme auf „false“ gesetzt.
Ich habe dieser Lösung auch ein Blazor Web Assembly-Projekt hinzugefügt und verwende die Serialisierung des Authentifizierungsstatus, um dies zu authentifizieren.
Die serverseitige Datei „program.cs“ sieht folgendermaßen aus:
Code: Select all
using BlazorClientWithReverseProxy.Components;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
builder.Services.AddSystemWebAdapters()
.AddRemoteAppClient(options =>
{
options.ApiKey = "F3A87C59-DA17-404F-B44C-E3594450FF23";
options.RemoteAppUrl = new Uri("http://localhost:8002/");
})
.AddAuthenticationClient(false);
builder.Services.AddRazorComponents()
.AddInteractiveWebAssemblyComponents()
.AddAuthenticationStateSerialization(options => options.SerializeAllClaims = true);
var app = builder.Build();
app.UseWebAssemblyDebugging();
app.UseSystemWebAdapters();
app.UseHttpsRedirection();
app.UseAntiforgery();
app.MapStaticAssets();
app.MapRazorComponents()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(BlazorClientWithReverseProxy.Client._Imports).Assembly);
app.MapReverseProxy();
app.Run();
Code: Select all
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.Services.AddAuthorizationCore();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddAuthenticationStateDeserialization();
await builder.Build().RunAsync();
Code: Select all
@attribute [Authorize]
@page "/hello"
@using Microsoft.AspNetCore.Authorization
@rendermode InteractiveWebAssembly
Hello world!
Beim Verarbeiten der Anfrage ist eine nicht behandelte Ausnahme aufgetreten.
InvalidOperationException: Es wurde kein AuthenticationScheme angegeben und es wurde kein DefaultChallengeScheme gefunden. Die Standardschemata können entweder mit AddAuthentication(string defaultScheme) oder AddAuthentication(Action configureOptions) festgelegt werden.
Ich kann dies beheben, indem ich .AddAuthenticationClient(true); in der serverseitigen program.cs festlege, aber dadurch werden die übermäßigen Authentifizierungsanforderungen des Reverse-Proxy-Fallbacks erneut eingeführt.
Wie kann Blazor das verwenden Serialisierung des Authentifizierungsstatus mit Webadaptern, ohne die YARP-Fallback-Verkehrsanforderungen durchzuführen?
Mobile version