Общая идея такова:
Сервер:
- Генерировать токен refre sh при входе в систему. Вы можете выбрать любой метод, какой захотите. Для простоты просто сгенерируйте случайный набор символов, например:
private string GenerateRefreshToken()
{
Random random = new Random();
byte[] baseBytes = new byte[128];
random.NextBytes(baseBytes);
return Convert.ToBase64String(baseBytes);
}
Сохраните его с датой истечения срока действия (например, 2 недели) и ссылкой на пользователя Разверните LoginController.Login, чтобы вернуть оба токена вместо одного Добавить новую конечную точку в LoginController (или расширить существующую). ) - LoginUsingRefreshToken
Здесь вы снова авторизуете своего пользователя, используя refre sh token. Поскольку вы сохранили токен refre sh, вы точно знаете, какой пользователь хочет войти снова. Продлить (или нет, выберите подход) дату истечения срока действия данного конкретного refre sh токена.
Клиент:
- Store refre sh token, как вы сохранили " обычный токен
await _localStorage.SetItemAsync("refreshToken", loginResult.RefreshToken);
Проверьте, не истек ли срок действия обычного токена. Вы можете сделать это разными способами:
Десериализовать токен перед каждым запросом и проверить дату истечения. Действуйте динамично: когда вы получаете 401 от сервера Установите таймер для повторного входа до истечения срока действия токена Или выберите что-то еще
Выполните повторную регистрацию, используя токен refre sh и вновь созданную конечную точку