Я пытаюсь подключиться к сервису SignalR из моего клиента веб-сборки Blazor, но мне кажется, что это не удается на CORS. Это код в моем файле бритвы.
m_connection = new HubConnectionBuilder()
.WithUrl(myMircoServiceUrl, options =>
{
options.AccessTokenProvider = () => Task.FromResult(userService.Token);
})
.WithAutomaticReconnect()
.Build();
await m_connection.StartAsync();
Затем в журнале веб-сборки я вижу следующую ошибку:
Доступ к выборке в 'xxxx /gotiate ?gotiateVersion = 1 'from origin' http://localhost: 5010 'заблокировано политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: заголовок «Access-Control-Allow-Origin» отсутствует на запрашиваемый ресурс. Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.
Я добавил следующую политику CORS в конфигурацию своего сервера Blazor и нечто подобное в Конфигурация микросервиса:
app.UseResponseCompression();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBlazorDebugging();
}
else
{
app.UseExceptionHandler(@"/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors(policy => policy
.WithOrigins("http://localhost:5010")
.AllowAnyHeader()
.AllowAnyMethod());
app.UseClientSideBlazorFiles<Client.Program>();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapFallbackToClientSideBlazor<Client.Program>(@"index.html");
});
Кто-нибудь понял, что может быть не так?
Обновление 1
Теперь я вижу следующую ошибку в Chrome console:
do tnet. js: 1 Соединение WebSocket с 'ws: // localhost: 5000 / hubs / posts? Id = 9Jxs0DhP924zgw_eIeE9Lg' не удалось: ошибка аутентификации HTTP; допустимые учетные данные недоступны
Обновление 2
Я удалил атрибут [Authorize]
из концентратора SignalR, и теперь он подключается. И я могу отправлять сообщения в хаб. Проблема в том, что есть причина для этого атрибута, потому что я не хочу, чтобы люди могли подписываться на сообщения, которые не для них
Обновление 3
Все еще нет прогресса , Рассматривая извлечение аутентификации на отдельный микросервис с использованием IdentityServer4. Последнее состояние: у меня есть следующие подпрограммы запуска:
- Микросервис: gist.github.com/njannink/15595b77ffe1c0593be1a555fa37f83f
- Blazor-сервер: gist.github.com/njannink/7302a888110eb669104454994994994994995994994994991991991994994994994994994104994994994999 *
- Клиент Blazor: gist.github.com/njannink/add2568cbf48c8b3c070ccd4f28fd127