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

  • 相关阅读:
    SpringMVC
    MyBatis 与 Spring 的完美整合方法
    持久层之 MyBatis: 第三篇 :缓存 And 高级查询
    持久层之 MyBatis: 第二篇 :动态SQL And多表查询
    C语言实现简单epoll服务器(二)
    C语言简单实现epoll服务器(一)
    shell编程题(十九)
    shell编程题(十七)
    shell编程题(十六)
    shell编程题(十三)
  • 原文地址:https://www.cnblogs.com/walt/p/15288728.html
Copyright © 2011-2022 走看看