Verwenden von YARP, System Web Adaptors und AddAuthenticationStateSerialization zur Authentifizierung einer Blazor-AnwenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Verwenden von YARP, System Web Adaptors und AddAuthenticationStateSerialization zur Authentifizierung einer Blazor-Anwen

Post by Anonymous »

Ich vermute, dass ich hier versuche, zu viele unterschiedliche Technologien zu verwenden, aber ich dachte, ich würde eine zweite Meinung einholen, bevor ich aufgebe...
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();
Und die Client-Programmdatei sieht so aus:

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();
Meine Blazor-Seite sieht so aus:

Code: Select all

@attribute [Authorize]
@page "/hello"
@using Microsoft.AspNetCore.Authorization
@rendermode InteractiveWebAssembly

Hello world!
Wenn ich versuche, zur Hallo-Seite zu navigieren, erhalte ich diese Fehlermeldung:

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post