【问题标题】:Blazor Authentication - Refresh Token for JWT tokenBlazor 身份验证 - 刷新 JWT 令牌的令牌
【发布时间】:2020-07-07 04:08:10
【问题描述】:
【问题讨论】:
标签:
c#
authentication
web
jwt
blazor-client-side
【解决方案1】:
大体思路是:
服务器:
- 在登录期间生成刷新令牌
你可以选择任何你想要的方法。为简单起见,只需生成随机字符集,例如:
private string GenerateRefreshToken()
{
Random random = new Random();
byte[] baseBytes = new byte[128];
random.NextBytes(baseBytes);
return Convert.ToBase64String(baseBytes);
}
- 将其与到期日期(如 2 周)一起存储并提供给用户
- 扩展 LoginController.Login 以返回两个令牌而不是一个
- 向 LoginController 添加新端点(或扩展现有端点)- LoginUsingRefreshToken
在这里,您使用刷新令牌再次登录您的用户。因为您存储了刷新令牌,所以您确切地知道哪个用户想要再次登录。延长(或不延长,选择您的方法)此特定刷新令牌的到期日期。
客户:
- 像存储“常规”令牌一样存储刷新令牌
await _localStorage.SetItemAsync("refreshToken", loginResult.RefreshToken);
-
检查常规令牌是否过期。您可以通过多种方式做到这一点:
在每次请求之前反序列化令牌并检查到期日期
动态行动:当你从服务器收到 401 时
设置计时器以在令牌过期之前重新登录
或者选择别的东西
使用刷新令牌和新创建的端点重新登录