jwt生成token存redis怎么存

fiy 其他 71

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    将JWT生成的Token存储到Redis中可以通过以下步骤实现:

    步骤1:生成JWT Token

    首先,使用JWT库根据用户信息和密钥生成JWT Token。例如,使用JSON Web Token库jsonwebtoken,可以进行如下操作:

    import jwt
    
    payload = {"user_id": "1234567890"}
    secret_key = "your_secret_key"
    
    token = jwt.encode(payload, secret_key, algorithm="HS256")
    

    步骤2:将Token存储到Redis中

    接下来,使用Redis客户端连接到Redis数据库,并将生成的Token存储到指定的键中。可以使用Python库redis操作Redis:

    import redis
    
    redis_host = "localhost"
    redis_port = 6379
    redis_db = 0
    token_key = "user:token:1234567890"
    
    # 连接到Redis数据库
    r = redis.Redis(host=redis_host, port=redis_port, db=redis_db)
    
    # 存储Token到Redis中
    r.set(token_key, token)
    

    在此示例中,将Token存储在名为"user:token:1234567890"的键中。

    注意:在实际应用中,可以根据需要设置Token的过期时间,并将过期时间一并存储到Redis中,以便后续校验Token的有效性。

    步骤3:验证Token

    在需要验证Token的地方,可以通过读取Redis中存储的Token,并使用JWT库进行Token的解密和验证。

    # 从Redis中获取Token
    stored_token = r.get(token_key)
    
    # 验证Token的有效性
    try:
        decoded_payload = jwt.decode(stored_token, secret_key, algorithms=["HS256"])
        user_id = decoded_payload["user_id"]
        # 进行其他操作,如获取用户信息等
    except jwt.ExpiredSignatureError:
        # Token已过期
        # 处理过期Token的逻辑
    except jwt.InvalidTokenError:
        # Token无效
        # 处理无效Token的逻辑
    

    通过以上步骤,就可以将JWT生成的Token存储到Redis中,并在需要验证Token时进行取出和验证操作。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    将JWT生成的token存储到Redis中,可以通过以下步骤实现:

    1. 导入Redis和jwt的相关依赖
      在项目的依赖文件中添加Redis和JWT的相关依赖,例如:

      <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>3.6.3</version>
      </dependency>
      <dependency>
          <groupId>io.jsonwebtoken</groupId>
          <artifactId>jjwt-api</artifactId>
          <version>0.11.2</version>
      </dependency>
      <dependency>
          <groupId>io.jsonwebtoken</groupId>
          <artifactId>jjwt-impl</artifactId>
          <version>0.11.2</version>
      </dependency>
      <dependency>
          <groupId>io.jsonwebtoken</groupId>
          <artifactId>jjwt-jackson</artifactId>
          <version>0.11.2</version>
      </dependency>
      
    2. 配置Redis连接
      在项目的配置文件中添加Redis的连接参数,例如:

      spring.redis.host=127.0.0.1
      spring.redis.port=6379
      spring.redis.password=
      
    3. 编写Token生成方法
      在代码中编写生成JWT token的方法,例如:

      import io.jsonwebtoken.Jwts;
      import io.jsonwebtoken.SignatureAlgorithm;
      
      public String generateToken(String userId) {
          Date now = new Date();
          Date expiryDate = new Date(now.getTime() + expirationTimeInMilliseconds);
      
          return Jwts.builder()
              .setSubject(userId)
              .setIssuedAt(new Date())
              .setExpiration(expiryDate)
              .signWith(SignatureAlgorithm.HS512, secret)
              .compact();
      }
      
    4. 存储Token到Redis
      在代码中配置Redis连接,并将生成的token存储到Redis中,例如:

      import redis.clients.jedis.Jedis;
      import redis.clients.jedis.JedisPool;
      
      public void storeTokenInRedis(String userId, String token) {
          JedisPool jedisPool = new JedisPool();
          try (Jedis jedis = jedisPool.getResource()) {
              jedis.set(userId, token);
              jedis.expire(userId, expirationTimeInMilliseconds / 1000); // 设置过期时间,单位为秒
          }
      }
      
    5. 使用存储的Token
      在需要验证token的接口中,可以从Redis中获取token,并进行验证,例如:

      import redis.clients.jedis.Jedis;
      import redis.clients.jedis.JedisPool;
      
      public boolean validateToken(String userId, String token) {
          JedisPool jedisPool = new JedisPool();
          try (Jedis jedis = jedisPool.getResource()) {
              String storedToken = jedis.get(userId);
              if (storedToken == null || !storedToken.equals(token)) {
                  return false;
              }
              return true;
          }
      }
      

    通过以上步骤,可以将JWT生成的token存储到Redis中,并在需要验证token的接口中使用存储的token进行验证。这样可以在分布式环境中实现token的验证和过期控制,并且可以实现token的主动清除。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    JWT是一种生成和验证身份凭证的方法,而Redis是一种高性能的键值存储数据库。将生成的JWT Token存储到Redis中,可以使得Token的管理更加灵活和安全。下面是一个将JWT Token存储到Redis的方法和操作流程的示例:

    1. 引入redis-py模块:
      首先,需要在Python代码中引入redis-py模块,这是一个用于与Redis数据库交互的Python库。可以使用以下命令通过pip安装redis-py库:
    pip install redis
    
    1. 连接Redis数据库:
      在代码中使用redis-py库连接到Redis数据库,在连接前需要知道Redis数据库的主机地址、端口和密码(如果设置了密码)。示例代码如下:
    import redis
    
    # 创建Redis连接
    redis_host = 'localhost'  # Redis主机地址
    redis_port = 6379  # Redis端口
    redis_password = 'password'  # Redis密码
    redis_db = 0  # Redis数据库编号
    redis_conn = redis.Redis(host=redis_host, port=redis_port, password=redis_password, db=redis_db)
    
    1. 生成JWT Token:
      在用户登录或认证成功后,可以使用JWT库生成JWT Token。生成Token的过程可以根据实际需求进行配置,例如设置Token过期时间、加密算法等。示例代码如下:
    import jwt
    
    def generate_token(user_id):
        # 设置过期时间,例如设置为1小时
        expiration_time = datetime.datetime.utcnow() + datetime.timedelta(hours=1)
        # 配置JWT Token的Payload
        payload = {
            'user_id': user_id,
            'exp': expiration_time
        }
    
        # 生成JWT Token
        jwt_secret = 'jwt_secret_key'  # JWT密钥
        token = jwt.encode(payload, jwt_secret, algorithm='HS256')
        
        return token
    
    1. 存储JWT Token到Redis:
      将生成的JWT Token存储到Redis中,可以使用Redis的set命令将Token作为值存储到一个键中。建议将键的名称设置为与用户相关,以便后续验证和获取Token。示例代码如下:
    def store_token(user_id, token):
        # 设置Redis键的名称
        redis_key = f'user:{user_id}:token'
        # 存储JWT Token到Redis中
        redis_conn.set(redis_key, token)
    
    1. 获取JWT Token:
      在需要验证用户身份凭证的地方,可以通过用户ID从Redis中获取对应的JWT Token。示例代码如下:
    def get_token(user_id):
        # 获取Redis键的名称
        redis_key = f'user:{user_id}:token'
        # 从Redis中获取JWT Token
        token = redis_conn.get(redis_key)
        
        return token
    

    通过上述方法和操作流程,可以方便地将生成的JWT Token存储到Redis中,并在需要时获取到对应的Token进行验证。存储到Redis中的Token也可以根据实际需求设置过期时间,从而增加Token的安全性。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部