#blazor #msal #blazor-client-side
#blazor #msal #blazor-на стороне клиента
Вопрос:
У меня есть приложение Blazor WASM, настроенное на использование аутентификации MSAL.
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.LoginMode = "redirect";
options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
options.ProviderOptions.DefaultAccessTokenScopes.Add("profile");
options.ProviderOptions.DefaultAccessTokenScopes.Add("{{ MY SCOPE }}");
options.ProviderOptions.Cache.CacheLocation = "localStorage";
});
Затем я могу ввести ITokenProvider
, чтобы получить токен доступа, который я могу добавить к своему HttpCLient
запросу.
var tokenGetter = await tokenProvider.RequestAccessToken();
if (tokenGetter.TryGetToken(out var token))
{
if (!String.IsNullOrWhiteSpace(token.Value))
{
//Token available here
}
}
Проблема в том, что когда я перехожу на [Authorize]
страницу с ограниченным доступом, я получаю следующие ошибки.
Не удалось загрузить ресурс: сервер ответил статусом 400 (неверный запрос) login.microsoftonline.oauth2/v2.0/token
Майкрософт.AspNetCore.Компоненты.WebAssembly.Рендеринг.WebAssemblyRenderer[100] Компонент рендеринга необработанного исключения: login_required: AADSTS50058: был отправлен запрос на автоматический вход, но ни один пользователь не вошел в систему.
Раньше все работало, поэтому я подозреваю, что срок действия моего токена истек, и его необходимо обновить. Я не уверен, где я могу это обнаружить. Могу ли я где-нибудь перехватить это исключение, а затем перенаправить пользователя обратно на страницу входа?
Все работает, если я не указываю местоположение кэша, но я не хочу использовать кэш сеанса для этого приложения.
Ответ №1:
Вы пробовали использовать шаблоны BlazorWasm? Это должно помочь вам начать. Информация о веб-приложениях. Информация об обработке условного доступа.