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

  • 相关阅读:
    Java如何遍历二维数据
    Java标识符中常见的命名规则
    Java中常量的概念
    Java的数据类型
    Java中的方法是什么以及方法的书写格式
    Java中什么是构造方法
    Java中继承的概念
    Java中的匿名对象代码实例
    Java集合案例(产生不重复随机数)
    Java中集合的初等案例
  • 原文地址:https://www.cnblogs.com/walt/p/15288728.html
Copyright © 2011-2022 走看看