天天看点

identityserver4之refresh token

背景:

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