Как получить доступ к JWT на сервере blazor после входа в систему? ⇐ C#

Место общения программистов C#
Anonymous
Как получить доступ к JWT на сервере blazor после входа в систему?

Сообщение Anonymous »

Я вызываю API для аутентификации из серверного проекта Blazor. API отвечает JWT.
Я могу сохранить его после входа в систему в ProtectedLocalStorage, вот так

Код: Выделить всё

await protectedLocalStorage.SetAsync("authToken", result.Data.Token);
И добавил CustomAuthenticationStateProvider, чтобы прочитать токен и добавить его во все DefaultRequestHeaders всех запросов, вот так

Код: Выделить всё

public override async Task GetAuthenticationStateAsync()
{

ProtectedBrowserStorageResult token;
var anonymous = new ClaimsPrincipal(new ClaimsIdentity());

try
{
try
{
token = await _protectedBrowserStorage.GetAsync("authToken");
}
catch
{
token = new();
}

if (!token.Success)
{
return new AuthenticationState(anonymous);
}
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token.Replace("\"", ""));
var identity = new ClaimsIdentity(ParseClaimsFromJwt(token.Value), "jwt");
var user = new ClaimsPrincipal(identity);
return await Task.FromResult(new AuthenticationState(user));
}
catch (Exception exc)
{
return new AuthenticationState(anonymous);
}
}
И можно удалить его для выхода из системы, вот так

Код: Выделить всё

await protectedLocalStorage.DeleteAsync("authToken");
Я заметил, что после входа в систему GetAuthenticationStateAsync всегда вызывается дважды: в первый раз _protectedBrowserStorage имеет значение null, а во второй раз — правильное значение .
Проблема в том, что когда я перехожу на любую страницу после входа в систему, _protectedBrowserStorage принимает значение null в GetAuthenticationStateAsync
Мне нужно знать, почему после входа в систему GetAuthenticationStateAsync вызывается дважды. Я предполагаю, что первый раз он вызывается на очень ранней стадии жизненного цикла Blazor, потому что я получаю это исключение.

Вызовы взаимодействия JavaScript не могут быть выполнены в настоящее время

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

Подробнее здесь: https://stackoverflow.com/questions/791 ... fter-login

Вернуться в «C#»