zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【LeetCode】048. Rotate Image
    【LeetCode】036. Valid Sudoku
    【LeetCode】060. Permutation Sequence
    【LeetCode】001. Two Sum
    【LeetCode】128. Longest Consecutive Sequence
    【LeetCode】081. Search in Rotated Sorted Array II
    【LeetCode】033. Search in Rotated Sorted Array
    顺时针打印矩阵
    矩形覆盖
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/walt/p/15288728.html
Copyright © 2011-2022 走看看