#blazor #blazor-webassembly
#blazor #blazor-webassembly
Вопрос:
Извините за новый вопрос.
Мне действительно нужно понять, каков обходной путь для этого нового шаблона.
Воспроизвести ошибку:
Visual Studio, совершенно новое приложение Blazor, названное «Demo3»
.NET 5.0, приложение Blazor WebAssembly, шаблон «CLI v5.0.100»
ASP.NET Основной хостинг,
аутентификация по протоколу https, Единый домен, чтение данных каталога
Запустите создание
Я делал это сотни раз в предыдущих шаблонах. Но этот «новый» шаблон сразу выдает ошибку, которую я не могу понять.
Подробные сведения:
Войдите в систему как обычно
, нажмите «Получить данные» (прогноз погоды)
И я получаю это сообщение об ошибке.
Ключевые слова: 401 и несанкционированный.
Я предполагаю, что несанкционированный — это важная информация.
info: System.Net.Http.HttpClient.Demo3.ServerAPI.ClientHandler[100]
Sending HTTP request GET https://localhost:44345/WeatherForecast
WeatherForecast:1 Failed to load resource: the server responded with a status of 401 ()
blazor.webassembly.js:1 info: System.Net.Http.HttpClient.Demo3.ServerAPI.ClientHandler[101]
Received HTTP response after 1272.7899ms - Unauthorized
blazor.webassembly.js:1 info: System.Net.Http.HttpClient.Demo3.ServerAPI.LogicalHandler[101]
End processing HTTP request after 1340.08ms - Unauthorized
blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Response status code does not indicate success: 401 (Unauthorized).
System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode () <0x337bf70 0x00052> in <filename unknown>:0
at System.Net.Http.Json.HttpClientJsonExtensions.GetFromJsonAsyncCore[T] (System.Threading.Tasks.Task`1[TResult] taskResponse, System.Text.Json.JsonSerializerOptions options, System.Threading.CancellationToken cancellationToken) <0x32c6740 0x000f4> in <filename unknown>:0
at Demo3.Client.Pages.FetchData.OnInitializedAsync () [0x0003c] in D:reposnameofreposrcDemo3Demo3ClientPagesFetchData.razor:48
at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync () <0x2c764b0 0x0013a> in <filename unknown>:0
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask (System.Threading.Tasks.Task taskToHandle) <0x2f401a8 0x000b6> in <filename unknown>:0
Как указывает ошибка, произошла ошибка авторизации.
Мой вопрос:
кто-нибудь нашел «официальную ссылку MS» на эту ошибку?
Или, может кто-нибудь объяснить, что не так.
Последующие действия
Просто для очистки я не изменяю и не добавляю никакого кода. Тестовый запуск выполняется непосредственно после завершения работы с шаблоном. Я, конечно, пытался отладить ошибку и посмотреть настройки в AzureAD, но безуспешно.
Второе последующее действие
Исследовал подсказку, подробности AADSTS7000218 в комментарии.
Итак, я создал проект. Вот подробности:
я изменил на Kestrel.
Я изменил настройки приложения Azure на SPA с тем же адресом перенаправления.
Дал себе права владельца на оба приложения.
Добавлены права доступа сервера к api в клиентском приложении. «api:// BlazorApp1_Server/user_impersonation»
Проверено: те же ошибки. Детали, и я все еще замечаю детали аудитории.
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Response status code does not indicate success: 401 (Unauthorized).
System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
И в заголовках ответа:
www-authenticate: Bearer error="invalid_token", error_description="The audience 'api://blazorapp1_server' is invalid"
Но ничего об AADSTS7000218 или отсутствующем секретном клиенте.
Все еще не отказываюсь от этого… Я вернусь…
Комментарии:
1. Вы уведомили AzAD о своем приложении?
2. Да, шаблон зарегистрировал оба. Demo3 (веб-сборка Blazor) и Demo3_Server (Rest Api). Пробовал различные изменения, но безуспешно. Также предоставил приложению wasm разрешение для серверного приложения… В предыдущих приложениях у меня были проблемы с точками аутентификации v1 и v2, и это мой лучший вопрос прямо сейчас.
3. Как бы то ни было, я мог бы воспроизвести это. Не моя область, но ответ содержит: AADSTS7000218: Тело запроса должно содержать следующий параметр: ‘client_assertion’ или ‘client_secret’. Что кажется знакомой ошибкой.
4. Я настраиваю новый проект и не могу найти ошибку AADSTS7000218.
Ответ №1:
Мне удалось устранить эту ошибку в моем проекте, добавив значение «Audience» в файл appsettings.json сервера
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "<domain>",
"TenantId": "<guid>",
"ClientId": "api://<apiname>",
"CallbackPath": "/signin-oidc",
"Audience": "api://blazorapp1_server"
},
Похоже, что проверка аудитории чувствительна к регистру и завершается неудачей, если идентификатор клиента содержит прописные буквы, а значение аудитории, переданное в токене предъявителя, указано в нижнем регистре. Добавление значения аудитории во все строчные буквы решило это для меня.
Ответ №2:
Большое вам спасибо! У меня была такая же проблема, и ваш пост был ключом к ее решению. Следует добавить одну вещь: значение для аудитории — это apiname в нижнем регистре:
"Audience": "api://<apiname in lowercase>"
Я также пытался изменить идентификатор клиента только на нижний регистр, но это не сработало.
В дополнение к добавлению «Аудитории» в appsettings.json для сервера, мне пришлось настроить регистрацию приложения для сервера следующим образом:
Платформа для сервера должна быть веб-платформой.
Мне также пришлось настроить регистрацию приложения для клиента.
Платформа для клиента должна быть SPA, и оба типа токенов должны быть отменены:
Ответ №3:
Я хочу вмешаться и сказать, что сегодня я действительно боролся с этим, и ответ Саши Стопа был правильным по деньгам. Большое спасибо.
Одна вещь, которую я хотел бы отметить, что с выпуском .NET 5 и последним обновлением Visual Studio 2019 теперь есть шаблон Blazor WebAssembly для рабочих или школьных учетных записей (т. Е. Проверка подлинности Azure AD). Я создал свое приложение с помощью этого шаблона и предположил, что он все настроит правильно. Это не так.
При регистрации клиентского приложения URI перенаправления настроены как Web, а не SPA. Это была первая проблема, с которой я столкнулся, и мне пришлось изменить ее вручную после проведения некоторых исследований. Второй проблемой была обсуждаемая здесь настройка аудитории. Я надеюсь, что Microsoft скоро исправит эти ошибки в шаблоне, потому что я уверен, что там будет много запутанных разработчиков.