Поделиться через


Защита изолированного приложения ASP.NET Core Blazor WebAssembly с помощью учетных записей Майкрософт

Примечание.

Это не последняя версия этой статьи. В текущем выпуске см. статью о .NET 9.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии, см. версию .NET 9 этой статьи.

Внимание

Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

В текущем выпуске смотрите версию .NET 9 этой статьи.

В этой статье объясняется, как создать автономное Blazor WebAssembly приложение, использующее учетные записи Майкрософт с Microsoft Entra (ME-ID) для проверки подлинности.

Дополнительные сведения о сценариях безопасности после чтения этой статьи см. в разделе ASP.NET Core Blazor WebAssembly дополнительных сценариев безопасности.

Пошаговое руководство

В подразделах пошагового руководства объясняется, как:

  • Создание клиента в Azure
  • Регистрация приложения в Azure
  • Blazor Создание приложения
  • Выполнить приложение

Создание клиента в Azure

Следуйте инструкциям в кратком руководстве по настройке арендатора для создания арендатора в ME-ID.

Регистрация приложения в Azure

Зарегистрируйте приложение ME-ID:

  1. Перейдите к ID Microsoft Entra в портала Azure. На боковой панели выберите Регистрация приложений. Нажмите кнопку Новая регистрация.
  2. Укажите имя для приложения (например, Blazor автономные учетные записи ME-ID MS).
  3. В поддерживаемых типах учетных записей выберите "Учетные записи" в любом каталоге организации (любой каталог идентификатора Microsoft Entra — Multitenant).
  4. Задайте раскрывающийся список URI перенаправления для одностраничного приложения (SPA) и укажите следующий URI перенаправления: https://localhost/authentication/login-callback Если вы знаете URI перенаправления рабочей среды для узла Azure по умолчанию (например, azurewebsites.net) или узла личного домена (к примеру, contoso.com), можно также добавить URI перенаправления рабочей среды одновременно с URI перенаправления localhost. Не забудьте включить номер порта для портов, не являющихся :443, в любые добавленные URI перенаправления в производственной среде.
  5. Если вы используете непроверенный домен издателя, снимите флажок Разрешения>Предоставьте согласие администратора для разрешений openid и offline_access. Если домен издателя является проверенным, этот флажок отсутствует.
  6. Выберите Зарегистрировать.

Примечание.

Указание номера порта для localhost URI перенаправления ME-ID не требуется. Дополнительные сведения см. в разделе об ограничениях URI перенаправления (URL-адрес ответа) и исключениях для Localhost (документация по Entra).

Запишите идентификатор приложения (клиента) (например, 00001111-aaaa-2222-bbbb-3333cccc4444).

В Аутентификация>Настройки платформы>одностраничное приложение:

  1. Подтвердите наличие URI перенаправления https://localhost/authentication/login-callback .
  2. В разделе Неявное предоставление доступа убедитесь, что флажки для токенов доступа и ID токенов не отмечены. Неявное предоставление не рекомендуется для Blazor приложений, использующих MSAL версии 2.0 или более поздней. Дополнительные сведения см. в статье Защита ASP.NET Core Blazor WebAssembly.
  3. Оставшиеся значения по умолчанию для приложения подходят для данного опыта.
  4. Нажмите кнопку Сохранить, если вы внесли изменения.

Blazor Создание приложения

Создайте приложение. Замените заполнители в следующей команде на записанные ранее сведения и выполните команду в командной оболочке:

dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" --tenant-id "common" -o {PROJECT NAME}
Заполнитель Название на портале Azure Пример
{PROJECT NAME} BlazorSample
{CLIENT ID} Идентификатор приложения (клиент) 00001111-aaaa-2222-bbbb-3333cccc4444

Выходное расположение, указанное с -o|--output параметром, создает папку проекта, если она не существует, и становится частью имени проекта.

Добавьте пару MsalProviderOptions для openid и offline_accessDefaultAccessTokenScopes:

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
});

Выполнить приложение

Используйте один из следующих подходов для запуска приложения:

  • Visual Studio
    • Нажмите кнопку Запустить.
    • В меню выберите Отладка>Начать отладку.
    • Нажмите клавишу F5.
  • Командная оболочка .NET CLI: выполните команду dotnet watch (или dotnet run) из папки приложения.

Части приложения

В этом разделе описываются части приложения, созданные на основе Blazor WebAssembly шаблона проекта, и способы настройки приложения. В этом разделе нет конкретных рекомендаций для базового рабочего приложения, если вы создали приложение с помощью руководства в разделе "Пошаговое руководство ". Руководство в этом разделе полезно для обновления приложения для проверки подлинности и авторизации пользователей. Однако альтернативный подход к обновлению приложения — создать новое приложение из руководства в разделе "Пошаговое руководство " и переместить компоненты, классы и ресурсы приложения в новое приложение.

Пакет проверки подлинности

Когда приложение создается для использования рабочих или учебных учетных записей (SingleOrg), оно автоматически получает ссылку на пакет для библиотеки проверки подлинности Майкрософт (Microsoft.Authentication.WebAssembly.Msal). В пакете содержится набор примитивов, которые помогают приложению проверять подлинность пользователей и получать маркеры для вызова защищенных API.

При добавлении проверки подлинности в приложение вручную добавьте пакет Microsoft.Authentication.WebAssembly.Msal в приложение.

Примечание.

Рекомендации по добавлению пакетов в приложения .NET см. в разделе Способы установки пакетов NuGet в статье Рабочий процесс использования пакета (документация по NuGet). Проверьте правильность версий пакета на сайте NuGet.org.

Пакет Microsoft.Authentication.WebAssembly.Msal транзитивно добавляет пакет Microsoft.AspNetCore.Components.WebAssembly.Authentication в приложение.

Поддержка службы проверки подлинности

Поддержка проверки подлинности пользователей регистрируется в контейнере службы с помощью метода расширения AddMsalAuthentication, предоставляемого в пакете Microsoft.Authentication.WebAssembly.Msal. Этот метод настраивает все службы, необходимые для взаимодействия приложения с поставщиком Identity (IP).

В файле Program:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
});

Метод AddMsalAuthentication принимает обратный вызов для настройки параметров, необходимых для проверки подлинности приложения. Значения, необходимые для настройки приложения, можно получить из конфигурации ME-ID при регистрации приложения.

wwwroot/appsettings.jsonКонфигурация

Конфигурация предоставлена в файле wwwroot/appsettings.json:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/common",
    "ClientId": "{CLIENT ID}",
    "ValidateAuthority": true
  }
}

Пример:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/common",
    "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
    "ValidateAuthority": true
  }
}

Области действия маркеров доступа

Шаблон Blazor WebAssembly не осуществляет автоматическую настройку приложения для запроса токена доступа для защищенного API. Чтобы выдать токен доступа в рамках процесса входа, добавьте scope токена в scope токенов доступа по умолчанию MsalProviderOptions:

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});

Укажите дополнительные области с помощью AdditionalScopesToConsent:

options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");

Примечание.

AdditionalScopesToConsent для Microsoft Graph через интерфейс согласия Microsoft Entra ID, когда пользователь впервые использует приложение, зарегистрированное в Microsoft Azure. Дополнительные сведения см. в статье Использование API Graph с ASP.NET Core Blazor WebAssembly.

Дополнительные сведения см. в следующих разделах статьи Дополнительные сценарии:

Режим входа

По умолчанию фреймворк использует всплывающий режим входа и переключается на режим входа с перенаправлением, если не удается открыть всплывающее окно. Настройте MSAL для использования режима перенаправления входа, задав для свойства LoginModeMsalProviderOptions значение redirect.

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.LoginMode = "redirect";
});

Параметр по умолчанию — popup, и строковое значение не учитывает регистр.

Файл импорта

Пространство имен Microsoft.AspNetCore.Components.Authorization становится доступным для всего приложения с помощью файла _Imports.razor:

...
@using Microsoft.AspNetCore.Components.Authorization
...

Страница индексации

Страница индекса (wwwroot/index.html) содержит сценарий, определяющий AuthenticationService в JavaScript. AuthenticationService обрабатывает низкоуровневые сведения о протоколе OIDC. Приложение внутренне вызывает методы, определенные в сценарии для выполнения операций проверки подлинности.

<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>

Компонент приложения

Компонент App (App.razor) аналогичен компоненту App, который находится в приложениях Blazor Server:

  • Компонент AuthorizeRouteView гарантирует, что текущий пользователь имеет право доступа к определенной странице или иным образом работать с компонентом RedirectToLogin.
  • Компонент RedirectToLogin управляет перенаправлением неавторизованных пользователей на страницу входа.
  • Компонент CascadingAuthenticationState управляет предоставлением AuthenticationState остальной части приложения.
  • Компонент AuthorizeRouteView гарантирует, что текущий пользователь имеет право доступа к определенной странице или иным образом работать с компонентом RedirectToLogin.
  • Компонент RedirectToLogin управляет перенаправлением неавторизованных пользователей на страницу входа.

Из-за различий в платформе между выпусками ASP.NET Core в этом разделе отсутствует разметка Razor для компонента App (App.razor). Чтобы изучить разметку этого компонента для конкретного выпуска, используйте один из следующих подходов:

  • создайте приложение, подготовленное для проверки подлинности, на основе шаблона проекта по умолчанию Blazor WebAssembly для версии ASP.NET Core, которую предполагается использовать. Изучите компонент App (App.razor) в созданном приложении;

  • изучите компонент App (App.razor) в справочных материалах. Выберите версию из селектора ветви и найдите компонент в ProjectTemplates папке репозитория, так как он перемещен на протяжении многих лет.

    Примечание.

    По ссылкам в документации на справочные материалы по .NET обычно загружается ветвь репозитория по умолчанию, которая представляет текущую разработку для следующего выпуска .NET. Чтобы выбрать тег для определенного выпуска, воспользуйтесь выпадающим списком Switch branches or tags (Переключение ветвей или тегов). Дополнительные сведения см. в статье Выбор тега версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).

Компонент RedirectToLogin

Компонент RedirectToLogin (RedirectToLogin.razor):

  • управляет перенаправлением неавторизованных пользователей на страницу входа.
  • Текущий URL-адрес, который пользователь пытается получить доступ, сохраняется для того, чтобы его можно было вернуть на эту страницу, если проверка подлинности будет успешной:

Изучите компонент RedirectToLogin в справочных материалах. Расположение компонента изменилось с течением времени, поэтому используйте средства поиска GitHub для поиска компонента.

Примечание.

По ссылкам в документации на справочные материалы по .NET обычно загружается ветвь репозитория по умолчанию, которая представляет текущую разработку для следующего выпуска .NET. Чтобы выбрать тег для определенного выпуска, используйте выпадающий список Переключение ветвей или тегов. Дополнительные сведения см. в статье Выбор тега версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).

Компонент LoginDisplay

Компонент LoginDisplay (LoginDisplay.razor) отображается в компоненте MainLayout (MainLayout.razor) и управляет следующими поведениями.

  • Для прошедших проверку подлинности пользователей:
    • Отображает имя текущего пользователя.
    • Отображает ссылку на страницу профиля пользователя в ASP.NET Core Identity.
    • предлагает кнопку для выхода из приложения.
  • Для анонимных пользователей:
    • Предоставляет возможность регистрации.
    • Предоставляет возможность входа в систему.

Из-за различий в платформе между выпусками ASP.NET Core в этом разделе отсутствует разметка Razor для компонента LoginDisplay. Чтобы изучить разметку этого компонента для конкретного выпуска, используйте один из следующих подходов:

  • создайте приложение, подготовленное для проверки подлинности, на основе шаблона проекта по умолчанию Blazor WebAssembly для версии ASP.NET Core, которую предполагается использовать. Изучите компонент LoginDisplay в созданном приложении.

  • Изучите компонент LoginDisplay в справочных материалах. Расположение компонента изменилось с течением времени, поэтому используйте средства поиска GitHub для поиска компонента. В качестве шаблонного содержимого используется Hosted, равное true.

    Примечание.

    Ссылки в документации на справочные материалы по .NET обычно ведут на основную ветвь репозитория, которая представляет текущую разработку для следующего выпуска .NET. Чтобы выбрать тег для определенного выпуска, используйте раскрывающийся список Switch branches or tags (Переключение ветвей или тегов). Дополнительные сведения см. в статье Выбор тега версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).

Компонент проверки подлинности

Страница, созданная компонентом Authentication (Pages/Authentication.razor), определяет маршруты, необходимые для обработки различных этапов проверки подлинности.

Компонент RemoteAuthenticatorView:

@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication

<RemoteAuthenticatorView Action="@Action" />

@code {
    [Parameter]
    public string? Action { get; set; }
}

Примечание.

В ASP.NET Core, начиная с версии .NET 6 и более поздней, поддерживаются nullable reference types (NRTs) и статический анализ null-state компилятора .NET. До выпуска ASP.NET Core в .NET 6 этот string тип отображается без обозначения типа нуль (?).

Устранение неполадок

Ведение журнала

Чтобы включить ведение журнала отладки или трассировки для Blazor WebAssembly проверки подлинности, смотрите раздел проверки подлинности на стороне клиента ASP.NET Core в статье Регистрация в ASP.NET Core с установленным селектором версий на ASP.NET Core 7.0 или более позднюю версию.

Распространенные ошибки

  • Неправильная настройка приложения или поставщика Identity (IP)

    Наиболее частые ошибки вызваны неправильной настройкой. Ниже приводятся несколько примеров.

    • В зависимости от требований сценария, отсутствие или некорректность таких элементов, как орган, экземпляр, идентификатор арендатора, домен арендатора, идентификатор клиента или URI перенаправления, мешает приложению выполнять аутентификацию клиентов.
    • Неверные области запросов не позволяют клиентам получать доступ к конечным точкам веб-API сервера.
    • Неправильные или отсутствующие разрешения API сервера не позволяют клиентам получить доступ к конечным точкам веб-API сервера.
    • Запуск приложения на порте, отличающемся от того, что настроено в URI перенаправления при регистрации приложения IP. Обратите внимание, что порт не обязателен для идентификатора Microsoft Entra и приложения, работающего на адресе тестирования разработки localhost, но конфигурация порта приложения и порт, на котором выполняется приложение, должны совпадать между различными адресами, не являющимися localhost.

    В разделах конфигурации этой статьи приведены примеры правильной настройки. Внимательно изучите каждый раздел статьи, проверяя неправильную настройку приложения и конфигурацию IP.

    Если конфигурация верна, выполните приведенные ниже действия.

    • Проанализируйте журналы приложений.

    • Изучите сетевой трафик между клиентским приложением и IP или серверным приложением с помощью инструментов разработчика браузера. Зачастую точное сообщение об ошибке или сообщение с указанием на причину проблемы возвращается клиенту серверным приложением или приложением интернет-протокола после выполнения запроса. Руководство по инструментам разработчика можно найти в следующих статьях:

    • В выпусках Blazor, где используется веб-токен JSON (JWT), декодируйте содержимое токена, используемого для проверки подлинности клиента или доступа к веб-API сервера, в зависимости от места возникновения проблемы. Дополнительные сведения о проверке содержимого JSON Web Token (JWT) см. в этом разделе.

    Команда разработчиков документации реагирует на отзывы о документах и ошибки в статьях (откройте запрос в разделе отзывов на этой странице), но не может предоставить поддержку продукта. Помощь в устранении неполадок в приложении предоставляют несколько общественных форумов поддержки. Мы рекомендуем следующее:

    Указанные выше форумы не принадлежат корпорации Майкрософт и не управляются ею.

    Чтобы сообщить об отчетах об ошибках платформы, которые не относятся к безопасности, конфиденциальности и чувствительным данным, создайте запрос с командой продукта ASP.NET Core. Не открывайте запрос в отдел продукта, пока вы не изучите причину проблемы и не убедитесь, что не можете решить ее самостоятельно или с помощью сообщества на форуме поддержки. Единица продукта не способна устранять неполадки отдельных приложений, которые не работают из-за неправильной конфигурации или вариантов использования с участием сторонних служб. Если отчет является конфиденциальным или содержит описание потенциальной уязвимости в продукте, которую могут использовать злоумышленники, см. статью "Отчеты о проблемах безопасности и ошибках" (репозиторий GitHub).

  • Несанкционированный клиент для ME-ID

    info: Авторизация не удалась Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]. Эти требования не выполнены: DenyAnonymousAuthorizationRequirement: требуется прошедший проверку подлинности пользователь.

    Ошибка обратного вызова входа из ME-ID:

    • Ошибка: unauthorized_client
    • Описание: AADB2C90058: The provided application is not configured to allow public clients.

    Чтобы устранить эту ошибку, сделайте следующее:

    1. На портале Azure перейдите к манифесту приложения.
    2. Задайте для атрибута allowPublicClient значение null или true.

Файлы cookie и данные сайта

Файлы cookie и данные сайта могут сохраняться в разных обновлениях приложений и повлиять на тестирование и устранение неполадок. При внесении изменений в код приложения, изменений в учетную запись пользователя у поставщика или изменений конфигурации приложения поставщика очистите следующее:

  • файлы cookie входа пользователей;
  • файлы cookie приложения;
  • кэшированные и сохраненные данные сайта.

Один из подходов, позволяющих предотвратить влияние устаревших файлов cookie и данных сайта на тестирование и устранение неполадок заключается в следующем:

  • Настройка браузера
    • Для тестирования используйте браузер, в котором можно настроить удаление всех файлов cookie и данных сайта при каждом закрытии браузера.
    • Убедитесь, что при любых изменениях в приложении, в данных тестового пользователя или в конфигурации поставщика закрытие браузера выполняется вручную или интегрированной средой разработки.
  • Используйте пользовательскую команду, чтобы открыть браузер в режиме InPrivate или Incognito в Visual Studio:
    • Откройте диалоговое окно Просмотр с помощью, нажав кнопку Запустить в Visual Studio.
    • Нажмите кнопку Добавить.
    • Укажите путь к браузеру в поле Программа. Следующие пути к исполняемым файлам являются типичными расположениями установки для Windows 10. Если браузер установлен в другом расположении или вы используете операционную систему, отличную от Windows 10, укажите путь к исполняемому файлу браузера.
      • Microsoft Edge: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
      • Google Chrome: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
      • Mozilla Firefox: C:\Program Files\Mozilla Firefox\firefox.exe
    • В поле "Аргументы" укажите параметр командной строки, который браузер использует для открытия в режиме InPrivate или Incognito. Для некоторых браузеров требуется URL-адрес приложения.
      • Microsoft Edge: используйте -inprivate.
      • Google Chrome: используйте --incognito --new-window {URL}, где метка {URL} представляет собой URL-адрес для открытия (например, https://localhost:5001).
      • Mozilla Firefox: используйте -private -url {URL}, где заполнитель {URL} — это URL-адрес для открытия (например, https://localhost:5001).
    • Введите имя в поле Понятное имя. Например, Firefox Auth Testing.
    • Выберите кнопку ОК.
    • Чтобы не выбирать профиль браузера для каждой операции тестирования с помощью приложения, задайте профиль по умолчанию с помощью кнопки По умолчанию.
    • Убедитесь, что при любых изменениях в приложении, в данных тестового пользователя или в конфигурации поставщика закрытие браузера выполняется интегрированной средой разработки.

Обновление приложений

Функционирующее приложение может перестать работать сразу после обновления .NET Core SDK на машине разработки или изменения версий пакетов в самом приложении. В некоторых случаях в результате важного обновления несогласованные пакеты могут нарушить работу приложения. Большинство этих проблем можно исправить следующим образом:

  1. Очистите кэши пакетов NuGet локальных систем, выполнив команду dotnet nuget locals all --clear из командной оболочки.
  2. Удалите папки bin и obj проекта.
  3. Восстановите и перестройте проект.
  4. Удалите все файлы из папки развертывания на сервере, прежде чем повторно развернуть приложение.

Примечание.

Использование версий пакета, несовместимых с требуемой платформой приложения, не поддерживается. Чтобы получить информацию о пакете, используйте NuGet Gallery.

Server Запуск приложения

При тестировании и устранении неполадок в размещенном Blazor WebAssemblyрешении убедитесь, что вы запускаете приложение из проекта Server.

Проверка пользователя

Следующий User компонент можно использовать непосредственно в приложениях или служить основой для дальнейшей настройки.

User.razor:

@page "/user"
@attribute [Authorize]
@using System.Text.Json
@using System.Security.Claims
@inject IAccessTokenProvider AuthorizationService

<h1>@AuthenticatedUser?.Identity?.Name</h1>

<h2>Claims</h2>

@foreach (var claim in AuthenticatedUser?.Claims ?? Array.Empty<Claim>())
{
    <p class="claim">@(claim.Type): @claim.Value</p>
}

<h2>Access token</h2>

<p id="access-token">@AccessToken?.Value</p>

<h2>Access token claims</h2>

@foreach (var claim in GetAccessTokenClaims())
{
    <p>@(claim.Key): @claim.Value.ToString()</p>
}

@if (AccessToken != null)
{
    <h2>Access token expires</h2>

    <p>Current time: <span id="current-time">@DateTimeOffset.Now</span></p>
    <p id="access-token-expires">@AccessToken.Expires</p>

    <h2>Access token granted scopes (as reported by the API)</h2>

    @foreach (var scope in AccessToken.GrantedScopes)
    {
        <p>Scope: @scope</p>
    }
}

@code {
    [CascadingParameter]
    private Task<AuthenticationState> AuthenticationState { get; set; }

    public ClaimsPrincipal AuthenticatedUser { get; set; }
    public AccessToken AccessToken { get; set; }

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        var state = await AuthenticationState;
        var accessTokenResult = await AuthorizationService.RequestAccessToken();

        if (!accessTokenResult.TryGetToken(out var token))
        {
            throw new InvalidOperationException(
                "Failed to provision the access token.");
        }

        AccessToken = token;

        AuthenticatedUser = state.User;
    }

    protected IDictionary<string, object> GetAccessTokenClaims()
    {
        if (AccessToken == null)
        {
            return new Dictionary<string, object>();
        }

        // header.payload.signature
        var payload = AccessToken.Value.Split(".")[1];
        var base64Payload = payload.Replace('-', '+').Replace('_', '/')
            .PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');

        return JsonSerializer.Deserialize<IDictionary<string, object>>(
            Convert.FromBase64String(base64Payload));
    }
}

Проверка содержимого JSON Web Token (JWT)

Чтобы декодировать JSON Web Token (JWT), используйте средство jwt.ms (Майкрософт). Значения в пользовательском интерфейсе остаются в браузере.

Пример закодированного JWT (сокращено для отображения):

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q

Пример JWT, декодированного инструментом для приложения, которое проходит проверку подлинности в Azure AAD B2C:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "exp": 1610059429,
  "nbf": 1610055829,
  "ver": "1.0",
  "iss": "https://mysiteb2c.b2clogin.com/11112222-bbbb-3333-cccc-4444dddd5555/v2.0/",
  "sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
  "aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "nonce": "bbbb0000-cccc-1111-dddd-2222eeee3333",
  "iat": 1610055829,
  "auth_time": 1610055822,
  "idp": "idp.com",
  "tfp": "B2C_1_signupsignin"
}.[Signature]

Дополнительные ресурсы