Я создал регистрацию приложения AAD B2C и предоставил из нее API. Затем я создал еще одну регистрацию приложения в качестве клиента и дал ему разрешение на доступ к API. Единственное заметное отличие от руководства заключается в том, что я ничего не нашел на вкладке Мои API, но мне удалось найти основную регистрацию приложения в разделе API, которые использует моя организация. .
Я следил за этим руководством MSFT. Я создал свой проект .NET с помощью команды, указанной в документации, просто вставил в него свои значения, и все выглядит так, как будто все настроено правильно.
Аутентификация работает как положено, используя знак по умолчанию. вход/регистрация. Но когда я пытаюсь получить доступ к методу Get контроллера WeatherForecast, я получаю исключение 401 Unauthorized. Это вывод консоли браузера:
GET https://localhost:PORT/WeatherForecast net::ERR_ABORTED 401
(Несанкционировано)
информация: System.Net.Http.HttpClient.ProjectPath.ClientHandler[101]
Получены заголовки ответа HTTP через 17,9 мс — 401
информация: System.Net.Http.HttpClient.ProjectPath.LogicalHandler[101]
Завершить обработку HTTP-запроса через 21 мс — 401
crit:
Microsoft.AspNetCore.Components.WebAssembly .Rendering.WebAssemblyRenderer[100]
Компонент отрисовки необработанных исключений: код состояния ответа не указывает на успех: 401 (неавторизованный).
System.Net.Http.HttpRequestException: код состояния ответа не указывает
указать успех: 401 (Несанкционированный). at
System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode() at
System.Net.Http.Json.HttpClientJsonExtensions.d`2[[ProjectPath.WeatherForecast[],
ProjectPath, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null],[System.Text.Json.JsonSerializerOptions,
System.Text.Json, Version=8.0.0.0, Culture=neutral ,
PublicKeyToken=cc7b13ffcd2ddd51]].MoveNext() в
ProjectPath.Client.Pages.FetchData.OnInitializedAsync() в
C:\Users\Folder\Project\Client\Pages\FetchData. razor:line 50 в
Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
в
Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task
taskToHandle, ComponentState owningComponentState ). p>
Я также расшифровал токен Bearer, и он выглядит хорошо:
Код: Выделить всё
{
"oid": "SOME-GUID",
"sub": "SAME-AS-ABOVE",
"name": "My_Authenticated_User_Name",
"tfp": "CORRECT_FLOW_NAME",
"nonce": "NONCE_GUID",
"scp": "CORRECT_SCOPE_NAME",
"azp": "CLIENT_APP_CLIENT_ID",
"ver": "1.0",
"iat": 1714230019,
"aud": "MAIN_APP_CLIENT_ID",
"exp": 1714233619,
"iss": "https://whatever.b2clogin.com/TENANT_ID/v2.0/",
"nbf": 1714230019
}
Код: Выделить всё
oidНе уверен, что версия (1.0) должна быть 2.0, поскольку это версия, указанная в выпуске и самом манифесте.
Я также предоставил права администратора согласие на разрешение API клиентского приложения.
Похоже, что я все еще не могу получить доступ к API из клиентского приложения, но не могу понять, почему. Будем очень признательны за любые идеи или помощь.
Подробнее здесь: https://stackoverflow.com/questions/783 ... ed-for-api
Мобильная версия