У меня есть приложение blazor wasm, размещенное на ядре asp net и подключенное через grpc-web. Он отлично работает с авторизованным пользователем, но я не могу совершать несанкционированные вызовы grpc. Я получаю это в журналах:
OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandler: Information: AuthenticationScheme: OpenIddict.Server.AspNetCore was forbidden.
Но с авторизованным пользователем этот запрос работает нормально.
Мой startup.cs (пробовал во всех возможных случаях auth/grpc/route):
app.UseRouting();
app.UseCors(policy => policy
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding"));
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(options =>
{
//options.MapGrpcServices(); //Here grpc
options.MapRazorPages();
options.MapControllers();
options.MapFallbackToFile("index.html");
});
В основном приложение настроено из официального образца: https://github.com/openiddict/openiddict-samples/tree/dev/samples/Balosar
Добавление [AllowAnonymous] в сервис grpc не помогает.
Как я могу разрешить несанкционированные запросы для некоторых служб grpc?





Если вы перенесли свое решение gRPC с Identity Server 4 и в Blazor.Client Program.cs что-то вроде этого:
builder.Services.AddHttpClient("MyClientName", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.ConfigurePrimaryHttpMessageHandler(() => new GrpcWebHandler(GrpcWebMode.GrpcWeb, new HttpClientHandler()))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
Попробуйте удалить .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(), но не забудьте проверить свое приложение на корректность запросов авторизации!
В результате у вас будет что-то вроде этого:
builder.Services.AddHttpClient("MyClientName", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.ConfigurePrimaryHttpMessageHandler(() => new GrpcWebHandler(GrpcWebMode.GrpcWeb, new HttpClientHandler()));