微服务轮子项目(04) - 服务认证架构设计(无网络隔离)

简介: 微服务轮子项目(04) - 服务认证架构设计(无网络隔离)

1. 环境说明

无网络隔离是指用户访问的网络环境与整个系统的部署网络环境是相通的,例如用户可以绕过API网关直接访问后台的服务。

2. 架构与设计思路

2.1 架构图

2.2 设计思路

2.2.1 统一认证
  • 负责登录认证
  • token派发
  • token刷新
  • 应用接入管理
2.2.2 API网关

只负责路由转发

2.2.3 微服务

每个服务都需加入认证中心的sdk负责所有请求的鉴权

2.2.4 TokenResolver

嵌入在微服务程序中通过SecurityContextHolder获取当前登录人,主要原理如下:

  • 判断当前url请求的方法有没有带有@LoginUser注解
  • 判断@LoginUser注解的isFull属性是否为true则通过username查询用户对象
  • 构建SysUser对象传给目标方法

3. 优化

与前面的架构对比,下图改进保证每个服务的API都有认证,并且客户端与服务内部分别使用不同的token同时融合了redisTokenjwt两者的优点,架构图如下:

3.1 设计思路

3.1.1 客户端使用redisToken
  • 减少网络带宽消耗:普通的uuid token对于jwt的长度小很多
  • 能实现更多的功能:使用redisToken功能更多,能方便实现如token自动续约、在线用户列表、踢人等功能
3.1.2 内部服务使用jwt
  • 场景符合:由于是内部服务使用,客户端只能获取access token没有jwt,所以无需让jwt token失效符合jwt特性
  • 提升性能:服务与服务之间的通信只需通过jwt自解析认证,无需网络连接,大大减少redis的压力和提升性能
  • 增加安全性:内部服务与客户端所使用的token不一样,能有效防止客户端绕开网关直接请求后面服务

4. 实践思路

  1. 自己实现一个RedisTokenStorestoreAccessToken的时候使用私钥生成JWT并存到Redis
  2. 网关添加过滤器在认证access_token成功后,获取JWT存到header中请求后面的内部服务
  3. 每个内部服务都添加@EnableResourceServer配置为资源服务器,并且ylw.oauth2.token.store设置为resJwt使用公钥自解析JWT
目录
相关文章
|
10月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
1114 0
|
7月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
650 0
|
Java Maven Android开发
微服务——SpringBoot使用归纳——Spring Boot开发环境搭建和项目启动
本文介绍了Spring Boot开发环境的搭建和项目启动流程。主要内容包括:jdk的配置(IDEA、STS/eclipse设置方法)、Spring Boot工程的构建方式(IDEA快速构建、官方构建工具start.spring.io使用)、maven配置(本地maven路径与阿里云镜像设置)以及编码配置(IDEA和eclipse中的编码设置)。通过这些步骤,帮助开发者顺利完成Spring Boot项目的初始化和运行准备。
1263 0
微服务——SpringBoot使用归纳——Spring Boot开发环境搭建和项目启动
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
364 0
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1424 0
|
10月前
|
文字识别 运维 监控
架构解密|一步步打造高可用的 JOCR OCR 识别服务
本文深入解析了JOCR OCR识别服务的高可用架构设计,涵盖从用户上传、智能调度、核心识别到容错监控的完整链路,助力打造高性能、低成本的工业级OCR服务。
421 0
架构解密|一步步打造高可用的 JOCR OCR 识别服务
|
10月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1345 0
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
710 12