[TOC]
## 一、无网络隔离是指用户访问的网络环境与整个系统的部署网络环境是相通的,例如用户可以绕过API网关直接访问后台的服务
### 1 架构图
#### 1.1 JWT

#### 1.2 Redis

### 2 设计思路
* **统一认证**:负责登录认证、token派发、token刷新、应用接入管理等功能
* **API网关**:只负责路由转发
* **微服务**:每个服务都需加入认证中心的sdk负责所有请求的鉴权
* **TokenResolver**:嵌入在微服务程序中通过SecurityContextHolder获取当前登录人,主要原理如下:
1. 判断当前url请求的方法有没有带有`@LoginUser`注解
2. 判断`@LoginUser`注解的`isFull`属性是否为`true`则通过`username`查询用户对象
3. 构建`SysUser`对象传给目标方法
## 二、无网络隔离的情况下需要保证每个服务的API访问都要进行认证
### 1 架构图

### 2 设计思路
在V1的架构基础上进行改进保证每个服务的API都有认证,并且客户端与服务内部分别使用不同的token同时融合了redisToken和jwt两者的优点
1. 客户端使用redisToken
* **减少网络带宽消耗**:普通的uuid token对于jwt的长度小很多
* **能实现更多的功能**:使用redisToken功能更多,能方便实现如token自动续约、在线用户列表、踢人等功能
2. 内部服务使用jwt
* **场景符合**:由于是内部服务使用,客户端只能获取access token没有jwt,所以无需让jwt token失效符合jwt特性
* **提升性能**:服务与服务之间的通信只需通过jwt自解析认证,无需网络连接,大大减少redis的压力和提升性能
* **增加安全性**:内部服务与客户端所使用的token不一样,能有效防止客户端绕开网关直接请求后面服务
### 3 实践思路
1. 自己实现一个`RedisTokenStore`在`storeAccessToken`的时候使用私钥生成`JWT`并存到`Redis`中
2. 网关添加过滤器在认证`access_token`成功后,获取`JWT`存到`header`中请求后面的内部服务
3. 每个内部服务都添加`@EnableResourceServer`配置为资源服务器,并且`pigframe.oauth2.token.store`设置为`resJwt`使用公钥自解析`JWT`
- 微服务介绍
- 软件架构设计
- 系统简介
- 运行环境
- 模块介绍
- 启动部署命令参数
- 打包说明
- 开发说明
- Java8
- 认证理论
- 有网络隔离
- 无网络隔离
- token自动续签设计
- url级权限控制
- 单点登录
- 登录
- 用户名密码(+验证码)登录
- 通过openId获取token
- 通过手机号获取token
- 第三方系统接口对接
- 第三方系统单点登录
- 通用刷新token
- 账号登出接口
- 统一异常处理
- 日志埋点工具
- 审计日志
- yml自定义配置自动提示
- Redis使用
- CacheManager集成
- 搜索中心
- 网关zuul动态路由
- swagger
- 解决开发环境的服务冲突和实例乱窜
- 多租户理论
- 多租户实现
- 分布式锁
- 分布式id生成器
- 分布式事务
- 分库分表sharding-sphere
- 消息队列
- 系统幂等性
- X 实时搜索系统设计
- Spring Cloud性能调优
- 链路跟踪
- JWT的RSA非对称密钥生成
- jdk
- Oracle
- OpenJDK
- Dragonwell
- JVM介绍
- 常见JVM内存错误及解决方案
- JVM分析工具详解
- nexus
- docker
- 安装
- docker-compose安装
- 私有仓库搭建
- 指定数据储存目录
- 添加私有仓库
- 提交拉取镜像
- X 免Dockerfile文件构建项目镜像
- 持续集成部署CI/CD
- Confluence知识管理
- JIRA事务与项目跟踪软件
- Gitlab代码仓库
- Jenkins自动化部署
- SonarQube代码检测
- Rancher容器管理平台
- nacos
- 部署
- Rancher部署nacos
- 注册中心
- 配置中心
- 多环境
- 生产部署方案
- X 通过Nginx来实现环境隔离
- Sentinel详解
- 动态规则扩展
- 在生产环境中使用 Sentinel
- 启动配置项
- X 网关流控
- ELK日志系统和慢查询SQL
- docker安装
- 普通安装
- Filebeat安装部署
- ES数据定期删除
- 没数据问题排查思路
- X Logstash的grok语法调试
- 慢查询sql
- 审计日志
- Elasticsearch性能优化
- APM监控
- SkyWalking介绍
- Zipkin,Pinpoint,SkyWalking三种服务链路监控组件分析
- 服务端部署
- 客户端部署
- 日志清理
- Metrics监控
- 二进制包部署
- docker部署
- docker安装各组件监控
- Grafana仪表盘和告警配置
- JMeter压力测试工具
- 使用说明
- 分布式事务
- TX-LCN(同步)
- X SEATA(同步)
- X RocketMQ(异步)
- 消息队列
- RocketMQ
- RocketMQ安装部署
- RocketMQ常见异常处理
- SpringCloud-Stream
- RabbitMQ
- Redis
- 单机安装
- 主从复制
- 主从复制+哨兵
- cluster集群
- 持久化方案
- MySQL
- 单机安装
- 主从复制
- 主从切换
- 主主复制
- 高可用
- 分表分库
- Canal数据库日志解析消费
- Canal安装
- 实时同步数据到ElasticSearch
- FastDFS
- docker安装
- centos安装
- 项目管理系统
- 禅道
- 111