软件安全本身就是个很复杂的问题,由于微服务系统中的每个服务都要处理安全问题,所以在微服务场景下会更复杂。David Borsos在最近的伦敦微服务大会上作了相关内容的演讲,并评估了四种面向微服务系统的身份验证方案。
在传统的单体架构中,单个服务保存所有的用户数据,可以校验用户,并在认证成功后创建HTTP会话。在微服务架构中,用户是在和服务集合交互,每个服务都有可能需要知道请求的用户是谁。一种朴素的解决方案是在微服务系统中应用与单体系统中相同的模式,但是问题就在于如何让所有的服务访问用户的数据。解决这个问题大致两个思路:若使用共享用户数据库时,更新数据库表会成为一个难题,因为所有服务必须同时升级以便能够对接修改后的表结构;若将相同的数据分发给所有服务时,当某个用户已经被认证,如何让每个服务知晓这个状态是一个问题。
Borsos指出,单点登录(SSO)方案可能看起来是一个好主意,但这意味着每个面向用户的服务都必须与认证服务交互,这会产生大量非常琐碎的网络流量,同时这个方案实现起来也相当复杂 。 在其他方面,选择SSO方案安全性会很好,用户登录状态是不透明的,可防止攻击者从状态中推断任何有用的信息。
分布式会话方案,原理主要是将关于用户认证的信息存储在共享存储中,且通常由用户会话作为key来实现的简单分布式哈希映射。 当用户访问微服务时,用户数据可以从共享存储中获取。 该解决方案的另一个优点是用户登录状态是不透明的。 当使用分布式数据库时,它也是一个高度可用且可扩展的解决方案。 这种方案的缺点在于共享存储需要一定保护机制,因此需要通过安全链接来访问,这时解决方案的实现就通常具有相当高的复杂性了。
客户端令牌方案, 此令牌在客户端生成,由身份验证服务进行签名,并且必须包含足够的信息,以便可以在所有微服务中建立用户身份。 令牌会附加到每个请求上,为微服务提供用户身份验证。 这种解决方案的安全性相对较好,但身份验证注销是一个大问题, 缓解这种情况的方法可以使用短期令牌和频繁检查认证服务等。 对于客户端令牌的编码方案,Borsos更喜欢使用JSON Web Tokens(JWT),它足够简单且库支持程度也比较好。
客户端令牌与API网关结合,这个方案意味着所有请求都通过网关,从而有效地隐藏了微服务。 在请求时,网关将原始用户令牌转换为内部会话ID令牌。 在这种情况下,注销就不是问题,因为网关可以在注销时撤销用户的令牌。 这种方案虽然库支持程度比较好,但实现起来还是可能很复杂。
Borsos建议使用客户端令牌(使用JWT)和API网关结合的方案,因为这个方案通常使用起来比较容易,且性能也不错。 SSO方案虽然能满足需求,但他认为还是应该避免使用。若分布式会话方案所需要的相关技术已经应用在你的场景上,那么这个方案也是比较有趣的。他同时强调在选择解决方案时应着重考虑注销的重要性。
相关推荐
总的来说,这个压缩包提供了一个关于微服务中统一认证和鉴权实践的综合案例,涵盖了OAuth2的实现、MyBatis集成以及高并发环境下的处理策略。对于理解和构建自己的微服务安全架构,这些资源是宝贵的参考资料。
在这个阶段,客户端携带用户信息(如UserId、UserName等)和Token向微服务系统发起请求。首先,这个请求会被路由到一个服务网关(Gateway),服务网关是微服务架构中非常关键的组件,它负责请求的映射、路由、过滤等...
### 基于Spring Cloud微服务系统设计方案 #### 微服务本质 微服务架构的核心在于其分布式特性,它强调将大型复杂系统分解为一系列小型、自治的服务组件,这些组件能够独立部署、扩展和维护。相比于传统单体架构,...
本文将深入探讨基于SpringCloud的微服务系统设计方案,涵盖核心组件、架构设计原则以及实施策略。 1. **微服务架构基础** 微服务架构是一种将单一应用程序分解为一组小型服务的方法,每个服务运行在其自己的进程中...
这种方法将用户认证信息存储在一个共享的存储系统中,通过用户会话作为键。虽然高可用且可扩展,但需要保护共享存储,增加实现的复杂性。 3. 客户端Token方案 客户端生成并携带Token,经过身份验证服务签名,包含...
【Spring Cloud 微服务系统架构】是现代企业级应用程序开发的一种流行框架,它基于Spring Boot的便利性和Netflix OSS的一系列工具,为构建分布式系统提供了全面的解决方案。在微服务架构中,每个服务都是一个独立的...
在这个系统中,MySQL承担了存储订单信息、用户数据、权限数据等关键任务,通过优化的SQL查询和索引策略,确保了数据的高效读写。 **4. HTML前端技术** HTML(超文本标记语言)是网页的基础,用于描述网页结构。在本...
在"实用的微服务系统架构图"中,我们可以预见到几个关键的知识点: 1. **服务拆分**:微服务架构的核心就是服务拆分,每个服务都有明确的业务边界,负责特定的功能。例如,可能有用户服务、订单服务、支付服务等,...
基于微服务的信息采集认证系统的设计与实现,不仅充分利用了Spring Boot框架的优势,还深入探索了微服务架构在实际项目中的应用价值。通过将信息采集与身份认证两大子系统进行微服务化改造,不仅提高了系统的可维护...
权限系统是确保应用安全的重要组成部分,它通常涉及到用户认证(Authentication)和授权(Authorization)。在MsSystem-BPM-ServiceAndWebApps项目中,可能采用了JWT(JSON Web Tokens)进行身份验证,这是一种轻量...
以上是构建基于Java Spring Boot的微服务系统的基础知识点,实际开发中还需要根据具体需求进行定制和优化,确保系统的高可用性和弹性扩展。通过持续学习和实践,开发者可以更好地掌握微服务架构,并利用Spring Boot...
【基于SpringCloud的微服务系统设计方案】 微服务架构是一种现代软件开发的方法,它提倡将单一应用程序分解为一组小的服务,每个服务都运行在独立的进程中,通过轻量级的通信机制,如HTTP RESTful API进行交互。...
《大型微服务系统管理istio架构实践》 在当今的数字化时代,微服务架构已经成为构建复杂、可扩展的软件系统的主流选择。而istio作为一款强大的Service Mesh(服务网格)平台,正在引领微服务管理的新潮流。本课程...
在当今的微服务架构中,服务之间的安全通信变得尤为重要。Spring Security OAuth提供了一套完整的解决方案,用于实现微服务之间的安全认证和授权。...希望这些信息能够帮助您构建更加安全、可靠的微服务系统。
【微服务系统功能架构】 微服务架构是一种将大型复杂应用分解为一组小而独立的服务的软件设计模式。每个服务都围绕特定业务能力进行构建,并且能够独立部署、扩展和升级。这种架构允许开发团队在不干扰其他服务的...
8. **权限控制与认证**:在后台管理系统中,通常会有角色权限控制,如JWT(JSON Web Token)认证,确保不同用户访问不同的功能模块。 9. **Mock数据**:在开发过程中,可能会使用Mock.js模拟后端数据,便于前端独立...
微服务架构需要实现服务间的安全通信,数据加密存储,以及确保通信过程中的认证和授权。 9. 服务治理:包括服务注册与发现、配置管理等,确保微服务可以被正确识别和管理。例如使用Consul或etcd这类工具来实现服务...
- **微服务化**:将系统分解为多个独立的服务,如购物车管理服务、中央认证服务等。 - **层次架构**:系统采用分层架构,清晰划分表现层、业务逻辑层、数据访问层等。 2. **功能模块设计**: - **商品管理服务**...