背景:
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