`

微服务系统中的认证策略

阅读更多

软件安全本身就是个很复杂的问题,由于微服务系统中的每个服务都要处理安全问题,所以在微服务场景下会更复杂。David Borsos在最近的伦敦微服务大会上作了相关内容的演讲,并评估了四种面向微服务系统的身份验证方案。

 

在传统的单体架构中,单个服务保存所有的用户数据,可以校验用户,并在认证成功后创建HTTP会话。在微服务架构中,用户是在和服务集合交互,每个服务都有可能需要知道请求的用户是谁。一种朴素的解决方案是在微服务系统中应用与单体系统中相同的模式,但是问题就在于如何让所有的服务访问用户的数据。解决这个问题大致两个思路:若使用共享用户数据库时,更新数据库表会成为一个难题,因为所有服务必须同时升级以便能够对接修改后的表结构;若将相同的数据分发给所有服务时,当某个用户已经被认证,如何让每个服务知晓这个状态是一个问题。

 

Borsos指出,单点登录(SSO)方案可能看起来是一个好主意,但这意味着每个面向用户的服务都必须与认证服务交互,这会产生大量非常琐碎的网络流量,同时这个方案实现起来也相当复杂 。 在其他方面,选择SSO方案安全性会很好,用户登录状态是不透明的,可防止攻击者从状态中推断任何有用的信息。

 

分布式会话方案,原理主要是将关于用户认证的信息存储在共享存储中,且通常由用户会话作为key来实现的简单分布式哈希映射。 当用户访问微服务时,用户数据可以从共享存储中获取。 该解决方案的另一个优点是用户登录状态是不透明的。 当使用分布式数据库时,它也是一个高度可用且可扩展的解决方案。 这种方案的缺点在于共享存储需要一定保护机制,因此需要通过安全链接来访问,这时解决方案的实现就通常具有相当高的复杂性了。

 

客户端令牌方案, 此令牌在客户端生成,由身份验证服务进行签名,并且必须包含足够的信息,以便可以在所有微服务中建立用户身份。 令牌会附加到每个请求上,为微服务提供用户身份验证。 这种解决方案的安全性相对较好,但身份验证注销是一个大问题, 缓解这种情况的方法可以使用短期令牌和频繁检查认证服务等。 对于客户端令牌的编码方案,Borsos更喜欢使用JSON Web Tokens(JWT),它足够简单且库支持程度也比较好。

 

客户端令牌与API网关结合,这个方案意味着所有请求都通过网关,从而有效地隐藏了微服务。 在请求时,网关将原始用户令牌转换为内部会话ID令牌。 在这种情况下,注销就不是问题,因为网关可以在注销时撤销用户的令牌。 这种方案虽然库支持程度比较好,但实现起来还是可能很复杂。

 

Borsos建议使用客户端令牌(使用JWT)和API网关结合的方案,因为这个方案通常使用起来比较容易,且性能也不错。 SSO方案虽然能满足需求,但他认为还是应该避免使用。若分布式会话方案所需要的相关技术已经应用在你的场景上,那么这个方案也是比较有趣的。他同时强调在选择解决方案时应着重考虑注销的重要性。

分享到:
评论

相关推荐

    如何使用Spring Cloud Gateway构建一个简单的微服务网关

    3.负载均衡:根据负载均衡策略将请求分发到不同的微服务实例,提高系统的吞吐量和可扩展性。 4.安全性和认证:通过集成认证和授权服务,实现对请求的安全验证和访问控制。 5.监控和统计:收集网关请求的指标数据,...

    如何使用Spring Cloud Gateway构建一个简单的微服务网关(2)

    3.负载均衡:根据负载均衡策略将请求分发到不同的微服务实例,提高系统的吞吐量和可扩展性。 4.安全性和认证:通过集成认证和授权服务,实现对请求的安全验证和访问控制。 5.监控和统计:收集网关请求的指标数据,...

    基于微服务架构的乐居租房网的设计与实现.rar

    为了提高系统的可靠性和性能,可能还引入了负载均衡、缓存策略、熔断机制和监控工具等先进的微服务实践。综上所述,基于微服务架构的乐居租房网的设计和实现,不仅提供了强大的租房服务功能,还确保了平台的高可用性...

    【MaxKey单点登录认证系统 v2.4.0 RC】企业级IAM身份管理和身份认证产品+RBAC权限管理.zip

    MaxKey(马克思的钥匙)用户单点登录认证系统(Sigle Sign On System),寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供...

    系统架构师案例分析知识点整理

    系统架构设计原则: SOLID原则:单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则 设计模式:常见设计模式如工厂模式、观察者模式、策略模式等 领域驱动设计(DDD):领域模型、限界上下文、...

    SpringBoot项目基于工程教育认证的计算机课程管理平台.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    JAVA毕业设计之基于springboot的疾病防控综合系统的设计与实现(springboot+mysql)完整源码.zip

    RestTemplate或FeignClient:用于实现服务之间的通信,假如系统中包含了多个微服务的话。 Maven或Gradle:用于项目的依赖管理和构建。 Thymeleaf或其他模板引擎:用于前端页面的渲染。 JWT(JSON Web Tokens):用于...

    SpringBoot项目师生健康信息管理系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、地图服务API以及支付网关等,以支持更广泛的...

    SpringBoot项目视频网站系统的设计与实现.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目校园疫情防控系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务(如短信通知、健康码验证等),以支持更广泛的功能需求。 总体...

    SpringBoot项目洗衣店订单管理系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目健身房管理系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目球队训练信息管理系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、地图服务API以及支付网关等,以支持更广泛的...

    SpringBoot项目校园失物招领系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目入校申报审批系统的设计与实现.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、地图服务API以及支付网关等,以支持更广泛的...

    SpringBoot项目基于springboot框架开发的景区民宿预约系统的设计与实现.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目精品在线试题库系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目基于springBoot政府管理的系统设计.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目基于springboot搭建的疫情管理系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

    SpringBoot项目基于多维分类的知识管理系统.zip

    为了提高系统的可用性和性能,可能会采用微服务架构、容器化部署(如Docker)、负载均衡、缓存策略等先进的技术手段。同时,系统还可能集成第三方服务,例如短信通知、支付网关等,以支持更广泛的功能需求。 总体来...

Global site tag (gtag.js) - Google Analytics