Использование YARP, системных веб-адаптеров и AddAuthenticationStateSerialization для аутентификации приложения Blazor.C#

Место общения программистов C#
Ответить
Anonymous
 Использование YARP, системных веб-адаптеров и AddAuthenticationStateSerialization для аутентификации приложения Blazor.

Сообщение Anonymous »

Я подозреваю, что пытаюсь использовать здесь слишком много разрозненных технологий, но я решил спросить второе мнение, прежде чем сдаваться...
У меня есть проект .NET 9.0, который использует YARP для обратного прокси-сервера на нашем устаревшем веб-сайте ASP.NET Framework. Аутентификация осуществляется на устаревшем веб-сайте, поэтому мы также используем веб-адаптеры для реализации аутентификации на веб-сайте .NET 9.0. Мы хотим, чтобы веб-адаптеры не выполняли ненужные запросы аутентификации к резервному маршруту YARP, поэтому следовали этим рекомендациям и установили для параметра isDefaultScheme значение false.
Я также добавил в это решение проект Blazor Web Assembly и использую сериализацию состояния аутентификации для его аутентификации.
Серверная программа program.cs выглядит следующим образом:

Код: Выделить всё

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();
А клиентская программа.cs выглядит так:

Код: Выделить всё

using Microsoft.AspNetCore.Components.WebAssembly.Hosting;

var builder = WebAssemblyHostBuilder.CreateDefault(args);

builder.Services.AddAuthorizationCore();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddAuthenticationStateDeserialization();

await builder.Build().RunAsync();
Моя страница Blazor выглядит так:

Код: Выделить всё

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

Hello world!
Когда я пытаюсь перейти на страницу приветствия, я получаю следующую ошибку:

При обработке запроса произошло необработанное исключение.

InvalidOperationException: не была указана схема аутентификации, и не было найдено DefaultChallengeScheme. Схемы по умолчанию можно установить с помощью AddAuthentication(string defaultScheme) или AddAuthentication(Action configureOptions).

Я могу исправить это, установив .AddAuthenticationClient(true); в серверной программе.cs, но это приведет к повторному введению чрезмерных запросов аутентификации резервного обратного прокси-сервера.
Как можно использовать Blazor сериализацию состояния аутентификации с помощью веб-адаптеров без предварительного формирования запросов резервного трафика YARP?

Подробнее здесь: https://stackoverflow.com/questions/798 ... n-to-authe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»