Аутентификация Blazor с использованием AzureAD — для учетных записей в любом каталоге организации

Я пытаюсь настроить приложение Blazor Wasm для аутентификации пользователя из любого каталога организации. Но когда пользователь пытается войти в систему, он получает сообщение об ошибке, если адрес электронной почты отсутствует в списке пользователей для каталога Azure Entra ID.

Вот как это называется в program.cs:

 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

Вот файл appsettings.json. Я пробовал обе организации и общее значение TenantId.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "Domain": "mydomain.onmicrosoft.com",
    "TenantId": "organizations",
    "ClientId": "myclientid012345678",
    "Scopes": "access_as_user",
    "CallbackPath": "/signin-oidc"
  }
}

Поддерживаемые типы учетных записей: Учетные записи в любом каталоге организации (любой клиент Microsoft Entra ID — мультитенантный)

Это чистое ядро ​​7

George Helmke 17.03.2024 12:37

Поделитесь пожалуйста ошибкой..

Harshitha 17.03.2024 13:37

В описание проблемы добавлено сообщение об ошибке

George Helmke 17.03.2024 13:52

Попробуйте один раз удалить области видимости в файле appsettings.json.

Harshitha 18.03.2024 04:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

AADTS50020: учетная запись пользователя «[email protected]» от поставщика удостоверений «https://sts.windows.net/xxx/» не существует в клиенте «Contoso» и не может получить доступ к приложению «xxx» (ClientAppRuk) в тот арендатор. Сначала учетную запись необходимо добавить в качестве внешнего пользователя в клиенте.

Первоначально я получил ту же ошибку:

Ошибка обычно возникает, если приложение Microsoft Entra ID не настроено как «Учетные записи в любом каталоге организации (любой клиент Microsoft Entra ID — мультитенант)», чтобы разрешить доступ другим пользователям-арендаторам.

  • В коде вам необходимо передать TenantId как organizations.
  • А также обязательно передайте полномочия как https://login.microsoftonline.com/organizations.

Я создал ServerAppRuk и выставил API, как показано ниже:

Создано ClientAppRuk и предоставлены разрешения API:

Для обоих приложений обязательно выберите параметр «Учетные записи в любом каталоге организации (любой клиент Microsoft Entra ID — мультитенант)»:

Чтобы устранить ошибку, обязательно передайте полномочия как https://login.microsoftonline.com/organizations, как показано ниже:

Файл клиентского приложения appsettings.json:

  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/organizations",
    "ClientId": "ClientAppID",
    "ValidateAuthority": true
  }
}

И убедитесь, что файл серверного приложения appsettings.json выглядит так, как показано ниже:

{
     "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "XXX.onmicrosoft.com",
    "TenantId": "organizations",
    "ClientId": "ServerAppID",
    "CallbackPath": "RedirectURL",
    "Scopes": "access_as_user"
  },
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "AllowedHosts": "*"
}

Обязательно добавьте клиентское приложение в конфигурацию серверного приложения, как показано ниже:

Передайте ClientID клиентского приложения.

После вышеуказанных настроек я могу успешно войти в приложение с другим пользователем-арендатором:

Использованная литература:

Конфигурация клиентского приложения (MSAL) — платформа идентификации Microsoft | Майкрософт

Защитите размещенное приложение ASP.NET Core Blazor WebAssembly с помощью Microsoft Entra ID | Майкрософт

Вы ДЕЙСТВИТЕЛЬНО приблизили меня к успеху, а затем я столкнулся с этой маленькой жемчужиной ошибки: «Войти При попытке войти в систему произошла ошибка: '9002326 - [2024-03-18 15:54:49Z]: AADSTS9002326: Погашение токена между источниками разрешено только для типа клиента «Одностраничное приложение». Я помню, что где-то в области EntraId указывал одностраничное приложение, но я использую Blazor Wasm. Есть идеи, как исправить это несоответствие импедансов?

George Helmke 18.03.2024 16:58

Не обращайте внимания на мой последний «комментарий». Я нашел ляп в своей настройке. Отличное решение, большое спасибо за вашу помощь!!!

George Helmke 18.03.2024 17:24

@GeorgeHelmke, ты решил свою проблему?

Rukmini 18.03.2024 17:27

Другие вопросы по теме

403 — запрещено — не удалось получить применимые категории SKU для пользователя при попытке добавить команду в группу Microsoft 365
Использование ManagedIdentity не идентифицирует принцип обслуживания, а его пользовательскую идентификацию пользователя локально отлаживает с помощью С#?
Можем ли мы создать событие в календаре пользователя с разрешениями приложения?
Проверка подлинности каталога Azure не работает, когда приложение выпущено, пока оно работает в Visual Studio
Почему секрет клиента требуется при настройке единого входа Azure AD/Identity в Asp.net (устаревшая версия .Net Framework), но не требуется в ядре asp.net?
Как создать события в календаре пользователя Outlook без учетной записи Microsoft?
API Python Graph Отправить электронное письмо В кеше не существует подходящего токена, и доступ запрещен
Серверное приложение Blazor с аутентификацией Microsoft Entra ID
Ошибка valid_grant — вызов API PowerShell Azure PartnerCenter Get-PartnerCustomer
Назначить пользователя PowerShell корпоративного приложения