Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Это не последняя версия этой статьи. Текущий выпуск можно найти в версии этой статьи о .NET 10.
Warning
Эта версия ASP.NET Core больше не поддерживается. Для получения дополнительной информации см. Политику поддержки .NET и .NET Core. Текущий выпуск можно найти в версии этой статьи о .NET 10.
В этой статье объясняется, как создать автономное приложение
Дополнительные сведения о сценарии безопасности после чтения этой статьи см. в разделе ASP.NET Core Blazor WebAssembly дополнительные сценарии безопасности.
Walkthrough
В подразделах пошагового руководства объясняется, как:
- Создание клиента в Azure
- Регистрация приложения в Azure
- Blazor Создание приложения
- Выполнить приложение
Создание клиента в Azure
Следуйте инструкциям в кратком руководстве: Настройка арендатора для создания арендатора в ME-ID.
Регистрация приложения в Azure
Зарегистрируйте приложение ME-ID:
- Перейдите к Microsoft Entra ID на портале Azure. Выберите Applications>Регистрация приложений на боковой панели. Нажмите кнопку Новая регистрация.
- Укажите имя для приложения (например, Blazor Standalone ME-ID).
- Выберите поддерживаемые типы учетных записей. Можно выбрать только учетные записи в этом организационном каталоге.
-
Задайте раскрывающийся список URI перенаправления для одностраничного приложения (SPA) и укажите следующий URI перенаправления:
https://localhost/authentication/login-callbackЕсли вы знаете URI перенаправления рабочей среды для узла Azure по умолчанию (например,azurewebsites.net) или узла личного домена (например,contoso.com), можно также добавить URI перенаправления рабочей среды в то же время, что вы предоставляете URI перенаправленияlocalhost. Не забудьте включить номер порта для портов, не связанных с:443, в любые добавленные URI перенаправления продуктивной среды. - Если вы используете непроверенный домен издателя, снимите флажок Разрешения>Предоставьте согласие администратора для разрешений openid и offline_access. Если домен издателя является проверенным, этот флажок отсутствует.
- Выберите Зарегистрировать.
Note
Указание номера порта для localhost URI перенаправления ME-ID не требуется. Для получения дополнительной информации, см. ограничения и лимиты URI перенаправления (URL-адрес ответа): исключения Localhost (документация по Entra).
Запишите следующие сведения:
- Идентификатор приложения (клиента) (например,
00001111-aaaa-2222-bbbb-3333cccc4444). - Идентификатор каталога (клиента) (например,
aaaabbbb-0000-cccc-1111-dddd2222eeee).
В Аутентификация>конфигурации платформы>одностраничное приложение:
- Подтвердите наличие URI перенаправления
https://localhost/authentication/login-callback. - В разделе "Implicit grant" убедитесь, что флажки для токенов доступа и токенов идентификатора не выбраны. Неявное предоставление не рекомендуется для Blazor приложений, использующих MSAL версии 2.0 или более поздней. Дополнительные сведения см. в разделе Secure ASP.NET Core Blazor WebAssembly.
- Оставшиеся параметры приложения по умолчанию подходят для этой задачи.
- Нажмите кнопку "Сохранить", если вы внесли изменения.
Blazor Создание приложения
Создайте приложение в пустой папке. Замените заполнители в следующей команде на записанные ранее сведения и выполните команду в командной оболочке:
dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" -o {PROJECT NAME} --tenant-id "{TENANT ID}"
| Placeholder | имя портала Azure | Example |
|---|---|---|
{PROJECT NAME} |
— | BlazorSample |
{CLIENT ID} |
Идентификатор приложения (клиент) | 00001111-aaaa-2222-bbbb-3333cccc4444 |
{TENANT ID} |
Идентификатор каталога (арендатора) | aaaabbbb-0000-cccc-1111-dddd2222eeee |
Указанное с параметром -o|--output выходное расположение создает папку проекта, если таковая не существует, и включается в имя проекта.
Добавьте MsalProviderOptions для разрешения User.Read с DefaultAccessTokenScopes:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes
.Add("https://graph.microsoft.com/User.Read");
});
Выполнить приложение
Используйте один из следующих подходов для запуска приложения:
- Visual Studio
- Нажмите кнопку Запустить.
- В меню выберите Отладка>Начать отладку.
- Нажмите клавишу F5.
- командная оболочка cli .NET: выполните команду
dotnet watch(илиdotnet run) из папки приложения.
Пути удаленной проверки подлинности
Пути удаленной проверки подлинности настраиваются с помощью RemoteAuthenticationApplicationPathsOptionsRemoteAuthenticationOptions<TRemoteAuthenticationProviderOptions>.AuthenticationPaths свойства в файле приложения Program . Значения пути по умолчанию фреймворка см. в справочном источникеdotnet/aspnetcore.
Note
Ссылки на справочную документацию .NET обычно ведут на ветвь репозитория по умолчанию, которая представляет собой текущую разработку следующего релиза .NET. Чтобы выбрать тег для определенного выпуска, используйте раскрывающийся список Switch branches or tags (Переключение ветвей или тегов). Дополнительные сведения см. в разделе Как выбрать тег версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Если приложение настраивает путь удаленной проверки подлинности, выполните любой из следующих подходов:
Сопоставлять путь в жестко закодированных строках по всему приложению.
Вставить Майкрософт.AspNetCore.Components.WebAssembly.Authentication.RemoteAuthenticationOptions<TRemoteAuthenticationProviderOptions>, чтобы получить настроенное значение по всему приложению. В следующем примере демонстрируется подход к компоненту
RedirectToLogin.Добавьте следующие Razor директивы в начало файла компонента Razor :
@using Microsoft.Extensions.Options @inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> RemoteOptionsИзмените перенаправление компонента в методе
OnInitialized:- Navigation.NavigateToLogin("authentication/login"); + Navigation.NavigateToLogin(RemoteOptions.Get(Options.DefaultName) + .AuthenticationPaths.LogInPath);Note
Если другие пути отличаются от путей шаблона проекта или путей по умолчанию платформы, управляйте ими таким же образом.
Части приложения
В этом разделе описываются части приложения, созданные на основе Blazor WebAssembly шаблона проекта, и способы настройки приложения. В этом разделе нет конкретных рекомендаций для базового рабочего приложения, если вы создали приложение с помощью руководства в разделе "Пошаговое руководство ". Руководство в этом разделе полезно для обновления приложения для проверки подлинности и авторизации пользователей. Однако альтернативный подход к обновлению приложения — создать новое приложение из руководства в разделе "Пошаговое руководство " и переместить компоненты, классы и ресурсы приложения в новое приложение.
Пакет проверки подлинности
Когда приложение создается для использования рабочих или учебных учетных записей (SingleOrg), приложение автоматически получает ссылку на пакет для Microsoft Authentication Library (Майкрософт.Authentication.WebAssembly.Msal). В пакете содержится набор примитивов, которые помогают приложению проверять подлинность пользователей и получать маркеры для вызова защищенных API.
При добавлении проверки подлинности в приложение вручную добавьте пакет Майкрософт.Authentication.WebAssembly.Msal.
Note
Рекомендации по добавлению пакетов в приложения .NET можно найти в статьях раздела Установка и управление пакетами на странице Потребление пакетов (документация NuGet). Проверьте правильность версий пакета на сайте NuGet.org.
Пакет Майкрософт.Authentication.WebAssembly.Msal транзитивно добавляет пакет Майкрософт.AspNetCore.Components.WebAssembly.Authentication в приложение.
Поддержка службы проверки подлинности
Поддержка проверки подлинности пользователей регистрируется в контейнере службы с помощью метода расширения AddMsalAuthentication, предоставленного пакетом Майкрософт.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/{TENANT ID}",
"ClientId": "{CLIENT ID}",
"ValidateAuthority": true
}
}
Example:
{
"AzureAd": {
"Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
"ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"ValidateAuthority": true
}
}
Области доступа токена
Шаблон Blazor WebAssembly не выполняет автоматическую настройку приложения для запроса токена доступа для защищенного API. Чтобы настроить маркер доступа как часть потока входа, добавьте область в области маркера доступа по умолчанию MsalProviderOptions:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
Укажите дополнительные области с помощью AdditionalScopesToConsent:
options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");
Note
AdditionalScopesToConsent не может подготавливать делегированные разрешения пользователей для Microsoft Graph через пользовательский интерфейс согласия Microsoft Entra ID, когда пользователь сначала использует приложение, зарегистрированное в Microsoft Azure. Дополнительные сведения см. в разделе Use API Graph with ASP.NET Core Blazor WebAssembly.
Дополнительные сведения см. на следующих ресурсах:
- Запросите дополнительные токены доступа
- Присоединение маркеров к исходящим запросам
- Краткое руководство. Настройка приложения для предоставления веб-API
- Области доступа токенов для Microsoft API Graph
Режим входа
По умолчанию фреймворк использует режим входа с использованием всплывающего окна и переходит в режим перенаправления для входа, если не удается открыть всплывающее окно. Настройте MSAL для использования режима перенаправления входа, задав для свойства LoginModeMsalProviderOptions значение redirect.
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.LoginMode = "redirect";
});
Параметр по умолчанию — popup, и строковое значение не учитывает регистр.
Импорт файла
Пространство имен Майкрософт.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папке репозитория, так как он перемещен на протяжении многих лет.Note
Ссылки на справочную документацию .NET обычно ведут на ветвь репозитория по умолчанию, которая представляет собой текущую разработку следующего релиза .NET. Чтобы выбрать тег для определенного выпуска, используйте раскрывающийся список Switch branches or tags (Переключение ветвей или тегов). Дополнительные сведения см. в разделе Как выбрать тег версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Компонент RedirectToLogin
Компонент RedirectToLogin (RedirectToLogin.razor):
- управляет перенаправлением неавторизованных пользователей на страницу входа.
- Текущий URL-адрес, который пользователь пытается получить, сохраняется, чтобы в случае успешной аутентификации его можно было вернуть на ту же страницу.
- Состояние истории навигации в ASP.NET Core в .NET 7 или более поздней версии.
- Строка запроса в ASP.NET Core в .NET 6 или более ранних версий.
Изучите компонент RedirectToLogin в справочных материалах. Расположение компонента изменилось с течением времени, поэтому используйте средства поиска GitHub для поиска компонента.
Компонент 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.Note
Ссылки на справочную документацию .NET обычно ведут на ветвь репозитория по умолчанию, которая представляет собой текущую разработку следующего релиза .NET. Чтобы выбрать тег для определенного выпуска, используйте раскрывающийся список Switch branches or tags (Переключение ветвей или тегов). Дополнительные сведения см. в разделе Как выбрать тег версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Компонент проверки подлинности
Страница, созданная компонентом Authentication (Pages/Authentication.razor), определяет маршруты, необходимые для обработки различных этапов проверки подлинности.
Компонент RemoteAuthenticatorView:
- Предоставляется пакетом
Майкрософт.AspNetCore.Components.WebAssembly.Authentication. - Управляет выполнением соответствующих действий на каждом этапе проверки подлинности.
@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
<RemoteAuthenticatorView Action="@Action" />
@code {
[Parameter]
public string? Action { get; set; }
}
Note
Nullable типы ссылок (NRTs) и статический анализ состояния null для компилятора .NET поддерживается на ASP.NET Core на .NET 6 или более поздней версии. До выпуска ASP.NET Core в .NET 6 тип string отображается без обозначения типа NULL (?).
Troubleshoot
Logging
Чтобы включить ведение журнала отладки или трассировки для аутентификации Blazor WebAssembly, см. раздел Ведение журнала аутентификации на стороне клиента в ASP.NET Core Blazor ведении журнала, установив селектор версий статьи на ASP.NET Core в .NET 7 или более поздней версии.
Распространенные ошибки
Неправильная настройка приложения или поставщика Identity (IP)
Наиболее частые ошибки вызваны неправильной настройкой. Ниже приводятся несколько примеров.
- В зависимости от требований сценария, отсутствующие или неправильные параметры, такие как авторитет, экземпляр, идентификатор арендатора, домен арендатора, идентификатор клиента или URI перенаправления, мешают приложению аутентифицировать клиентов.
- Неверные области запросов не позволяют клиентам получать доступ к конечным точкам веб-API сервера.
- Неправильные или отсутствующие разрешения API сервера не позволяют клиентам получить доступ к конечным точкам веб-API сервера.
- Запуск приложения на порту, отличающемся от указанного в URI перенаправления при регистрации приложения. Обратите внимание, что порт не требуется для Microsoft Entra ID и приложения, работающего на адресе тестирования
localhostразработки. Однако конфигурация порта приложения и порт, на котором выполняется приложение, должны соответствовать, если используются адреса, отличные отlocalhost.
В разделах конфигурации этой статьи приведены примеры правильной настройки. Внимательно проверьте каждый раздел статьи на наличие неправильных настроек приложения и IP-адреса.
Если конфигурация верна, выполните приведенные ниже действия.
Проанализируйте журналы приложений.
Изучите сетевой трафик между клиентским приложением и IP или серверным приложением с помощью инструментов разработчика браузера. Зачастую точное сообщение об ошибке или сообщение с указанием на то, что вызывает проблему, возвращается клиенту с помощью серверного приложения или приложения поставщика удостоверений после выполнения запроса. Рекомендации по инструментам разработчика приведены в следующих статьях:
- Google Chrome (документация по Google)
- Microsoft Edge
- Mozilla Firefox (документация по Mozilla)
В выпусках, в Blazor которых используется веб-токен JSON (JWT), декодирует содержимое маркера, используемого для проверки подлинности клиента или доступа к веб-API сервера в зависимости от места возникновения проблемы. Дополнительные сведения о проверке содержимого JSON Web Token (JWT) см. в этом разделе.
Команда разработчиков документации реагирует на отзывы о документах и ошибки в статьях (откройте запрос в разделе отзывов на этой странице), но не может предоставить поддержку продукта. Помощь в устранении неполадок в приложении предоставляют несколько общественных форумов поддержки. Мы рекомендуем следующее:
Предыдущие форумы не принадлежат или управляются Майкрософт.
Для воспроизводимых отчетов об ошибках платформы, которые не связаны с безопасностью и не считаются конфиденциальными, откройте проблему с единицей продукта ASP.NET Core. Не открывайте вопрос с группой продукта, пока вы тщательно не изучите причину проблемы и не сможете решить её самостоятельно или с помощью сообщества на общедоступном форуме поддержки. Единица продукта не способна устранять неполадки отдельных приложений, которые не работают из-за неправильной конфигурации или вариантов использования с участием сторонних служб. Если отчет является конфиденциальным по своей природе или описывает потенциальный недостаток безопасности в продукте, который может использоваться злоумышленниками, см. Сообщение о проблемах безопасности и ошибках (
dotnet/aspnetcoreрепозитории на GitHub).Несанкционированный клиент для ME-ID
сведения: Майкрософт.AspNetCore.Authorization.DefaultAuthorizationService[2] Авторизация не удалась. Эти требования не выполнены: DenyAnonymousAuthorizationRequirement: требуется прошедший проверку подлинности пользователь.
Ошибка обратного вызова входа из ME-ID:
- Ошибка:
unauthorized_client - Описание:
AADB2C90058: The provided application is not configured to allow public clients.
Чтобы устранить эту ошибку, сделайте следующее:
- На портале Azure перейдите к манифесту приложения.
- Задайте для атрибута
allowPublicClientзначениеnullилиtrue.
- Ошибка:
Файлы cookie и данные сайта
Файлы cookie и данные сайта могут сохраняться в разных обновлениях приложений и повлиять на тестирование и устранение неполадок. При внесении изменений в код приложения, изменений в учетную запись пользователя у поставщика или изменений конфигурации приложения поставщика очистите следующее:
- файлы cookie входа пользователей;
- Файлы cookie приложений
- кэшированные и сохраненные данные сайта.
Один из подходов, позволяющих предотвратить влияние устаревших файлов cookie и данных сайта на тестирование и устранение неполадок заключается в следующем:
- Настройка браузера
- Для тестирования используйте браузер, в котором можно настроить удаление всех файлов cookie и данных сайта при каждом закрытии браузера.
- Убедитесь, что при любых изменениях в приложении, в данных тестового пользователя или в конфигурации поставщика закрытие браузера выполняется вручную или интегрированной средой разработки.
- Используйте пользовательскую команду, чтобы открыть браузер в режиме InPrivate или Incognito в Visual Studio:
- Откройте в Visual Studio диалоговое окно Browse With с кнопки Run.
- Нажмите кнопку Добавить.
- Укажите путь к браузеру в поле Программа. Следующие пути исполняемого файла являются типичными расположениями установки для Windows 10. Если браузер установлен в другом расположении или вы не используете Windows 10, укажите путь к исполняемому файлу браузера.
- Microsoft Edge:
C:\Program Files (x86)\Майкрософт\Edge\Application\msedge.exe - Google Chrome:
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe - Mozilla Firefox:
C:\Program Files\Mozilla Firefox\firefox.exe
- Microsoft Edge:
-
В поле "Аргументы" укажите параметр командной строки, который браузер использует для открытия в режиме 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).
- Microsoft Edge. Используйте
- Введите имя в поле Дружественное имя. Например,
Firefox Auth Testing. - Выберите кнопку ОК.
- Чтобы не выбирать профиль браузера для каждой операции тестирования с помощью приложения, задайте профиль по умолчанию с помощью кнопки По умолчанию.
- Убедитесь, что при любых изменениях в приложении, в данных тестового пользователя или в конфигурации поставщика закрытие браузера выполняется интегрированной средой разработки.
Обновления приложений
Функционирующее приложение может перестать работать сразу после обновления .NET SDK на компьютере разработчика или изменения версий пакетов в приложении. В некоторых случаях несогласованные пакеты могут нарушить работу приложения при проведении крупного обновления. Большинство этих проблем можно исправить следующим образом:
- Очистите кэши пакетов NuGet локальных систем, выполнив команду
dotnet nuget locals all --clearиз командной оболочки. - Удалите папки
binиobjпроекта. - Восстановите и перестройте проект.
- Удалите все файлы из папки развертывания на сервере, прежде чем повторно развернуть приложение.
Note
Использование версий пакета, несовместимых с требуемой платформой приложения, не поддерживается. Чтобы получить информацию о пакете, используйте 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 (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]
Дополнительные ресурсы
- Identity Типы учетных записей для одноуровневых и мультитенантных приложений
- ASP.NET Core Blazor WebAssembly дополнительные сценарии безопасности
- Создание пользовательской версии библиотеки Authentication.MSAL для JavaScript
- Запросы веб-API, не прошедшие проверку подлинности или неавторизованные, в приложении с защищенным клиентом по умолчанию
- ASP.NET Core Blazor WebAssembly с группами и ролями Microsoft Entra ID
- Платформа идентификации Microsoft и Microsoft Entra ID с ASP.NET Core
- Документация по Microsoft Identity Platform
- Передовые методы безопасности для свойств приложения в Microsoft Entra ID
ASP.NET Core