Token && Practice

Docker


虚拟化平台 基于虚拟机虚拟化
Docker 系统虚拟化,依赖于宿主主机
VMware 硬件虚拟化 ,不依赖于宿主机的操作系统

Docker:

  • 需要一个隔离的环境,可以在docker容器中安装所有的环境,然后打包成一个镜像。用docker来启动。

虚拟机:

  • 需要一个操作系统的时候使用虚拟机
systemctl status docker  # 查看docker 状态
systemctl enable docker  # 开机器自启

修改docker的镜像源

cd /etc/docker/
touch daemon.json
{
  "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io"
  ]
}

重新加载

systenctl daemon-reload
systemctl restart docker # 重启 docker 服务

下载redis : docker pull registry.cn-hangzhou.aliyuncs.com/iwebedu/redis:5.0.4

启动容器

docker run -itd  \
--publish 6379:6379  \
--volume ./conf/redis.conf:/etc/redis/redis.conf \
--volume ./data:/data \
--name redis \
registry.cn-hangzhou.aliyuncs.com/iwebedu/redis:5.0.4  

如果每次都这样来启动是很麻烦的事情,所以可以在工具目录/root/docker/redis先创建一个docker-compose.yml文件来启动
touch docker-compose.yml 在该文件中添加一下内容

services:
  redis:
    container_name: redis
    image: registry.cn-hangzhou.aliyuncs.com/iwebedu/redis:5.0.4
    restart: unless-stopped # 开机自启/异常重启
    ports:
      - "6379:6379" # 宿主机端口映射到容器端口
    volumes:
      # 挂载Redis核心配置(复用官方默认配置,仅追加ACL配置)
      - ./conf/redis.conf:/etc/redis/redis.conf
      # 数据卷:持久化Redis数据到宿主机
      - ./data:/data
    command: >
      redis-server /etc/redis/redis.conf  
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "iweb123456", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3
    networks:
      - redis-network

networks:
  redis-network:
    driver: bridge
docker compose up -d  # 启动容器,在工作目录下启动
docker ps -a          # 查看所有的容器
# 清理并停止 docker 对应的镜像
docker stop  redis && docker docker rm redis 

# 如果使用 docker-compose.ymml来管理 docker 镜像的话可以使用下面的指令来管理
docker compose up -d    # 启动
docker compose down - v # 停止docker 服务并删除docker 

## 对应的 sql 也可以使用 docker 来操作和管理 sql 镜像

Json web Token -- jwt

主要的认证体系 : 你是谁

  • Http Basic : 每次访问的时候绑定用户的用户名和密码(Base64), 基本上不用于任何服务器。用于内部接口的访问
  • Cookie + Session : 每次访问的时候携带 cookie , cookie 中保存了 sessionid , 用于 web 服务器。不支持分布式、集群。因为 session 是服务器的一个内存 (session 对象),所以可以通过 redis 实现跨服务器的 session 共享
  • Token : web token,每次访问的时候携带 token ,服务器通过解析 token 获取身份信息。用于前后段分离、集群和分布。缺点是 token 无状态,没有服务器保存用户的身份信息。可以通过 redis 实现有状态的管理
  • auth2 : 用于第三方认证。比如: steam 登录、WeGame登录
  • Apikey : 大模型
  • 二次认证 : 扫码支付、生物识别...
Token的刷新策略
  • 长期 token : 给token 设置一个长久的失效时间、不安全。内网的系统
  • 延时token : 设定一个阈值、使用token的过期时间 - 当前时间 < 阈值,刷新token
    • 每次访问的时候只需要比较这个阈值就可以了
    • 模拟的session机制
  • 双令牌: 认证成功后返回2个 token; access_token + refresh_token
    • access_token :
      • 前端保存到 cookie, 30 分钟, 因为 cookie 天然可以设置失效时间
      • 每次访问资源的时候携带 access_token , 如果解析失败返回 refresh_token
      • 短期的 , 被抓包破解时间段
    • refresh_token :
      • 前端保存 localstorage 7天,没有失效时间
      • 用来刷新 access_token
      • 如果refresh_token 过期则重新认证
      • 每 30 分钟 才会发送一次 refresh_token,相比较 access_token 更加安全
      • 可以做二次开发,安全要求比较的访问可以要求携带 refresh_token
Token + Redis
  • token 是无状态的。默认情况下不会保存到服务器中的
  • 通常情况下都会保存到 redis 中,可以通过管理 redis 中的 token 来管理用户的登录状态
  • 如果一个用户离职了,需要将这个员工的账号清理
  • 可以清理 redis 中的用户token 来确保账号的安全
  • 每次验证的时候可以从 reids 中获取 token

token + RBAC(5张表的设计、重要的主键 等)

  • 每个会话只有一个token
  • SpringSecurity 中每次访问资源的时候都会从数据库中查询用户的权限
  • 以token 为 key , 权限列表为value保存到 redis 中。 token实现, 权限即失效
  • 每次访问资源的时候从 redis 中获取, 如果redis 中保存了权限直接返回,如果没有则查询数据库后保存 redis
posted @ 2026-08-06 11:24  黑单  阅读(10)  评论(0)    收藏  举报