背景:
app程序在第一次使用账号密码/手机验证码登录后,之后希望自动登录,这时考虑使用identityserver4的refresh token
1.第一次登录
第一次登录使用账号密码后,返回access token以及refresh token,另外还有其他属性
2.refresh token持久化
在identityserver4启动的时候,使用redis缓存持久化Cache以及Operational
3.具体实现
查看源码,抽离主要逻辑
class Program { private static ConcurrentDictionary<string, string> _repository = new ConcurrentDictionary<string, string>(); static void Main(string[] args) { // 第一次生成refresh token var refreshToken = DefaultHandleGenerationService.GenerateAsync(32); string key = GetHashedKey(refreshToken); // 存储 _repository[key] = refreshToken; // 第二次刷新refresh token,需要带着之前的refresh token换新的 string input = refreshToken; var newKey = GetHashedKey(input); if (!string.IsNullOrEmpty(_repository[newKey])) { Console.WriteLine("说明老refresh token存在,可以换新的"); } else { Console.WriteLine("老refresh token不存在"); } Console.ReadLine(); } protected static string GetHashedKey(string value) { return (value + ":" + "refresh_token").ToSha256(); } }
只有refresh token存在的情况,才能生成key去找缓存的数据,所以只能以token换token,没法使用其他方式找到你想要的token