Новый шаблон Blazor Webassembly CLI v5.0.100 выдает «несанкционированный»

#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 скоро исправит эти ошибки в шаблоне, потому что я уверен, что там будет много запутанных разработчиков.