微服务网关做认证(微服务统一网关)

网友投稿 402 2022-12-29


本篇文章给大家谈谈微服务网关做认证,以及微服务统一网关对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享微服务网关做认证的知识,其中也会对微服务统一网关进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Spring Cloud体系下配合Zuul网关进行微服务认证鉴权之一

本文主题是作者在 Spring Cloud 体系下通过 Zuul 网关来进行认证的迁移授权的前移、统一管理和业务服务进行鉴权的思考和做法。
本文介绍的做法是根据 Zuul 来做的微服务网关做认证,对 Zuul 不熟悉的朋友可以看看下面这篇文章,通过这篇对 Zuul 深入浅出的介绍之后能对 Zuul 有个大致的微服务网关做认证了解。
出自方志朋的博客:深入理解Zuul之源码解析

微服务权限终极解决方案(spring-cloud-gateway-oauth2)

微服务网关做认证我们理想微服务网关做认证的微服务权限解决方案应该是这样的微服务网关做认证,认证服务负责认证,网关负责校验认证和鉴权,其他API服务负责处理自己的业务逻辑。安全相关的逻辑只存在于认证服务和网关服务中,其他服务只是单纯地提供服务而没有任何安全相关逻辑。

通过认证服务( oauth2-auth )进行统一认证,然后通过网关( oauth2-gateway )来统一校验认证和鉴权。采用Nacos作为注册中心,Gateway作为网关,使用nimbus-jose-jwtJWT库操作JWT令牌。

接下来搭建网关服务,它将作为Oauth2的资源服务、客户端服务使用,对访问微服务的请求进行统一的校验认证和鉴权操作

最后我们搭建一个API服务,它不会集成和实现任何安全相关逻辑,全靠网关来保护它

在此之前先启动我们的 Nacos 和 Redis 服务,然后依次启动 oauth2-auth 、 oauth2-gateway 及 oauth2-api 服务

我这里测试使用的 Docker 跑的单机版的 Nacos

github.com/it-wwh/spring-cloud-gateway-oauth2

个人对微服务身份认证与鉴权的认识

从单体应用架构到分布式应用架构再到微服务架构微服务网关做认证,应用微服务网关做认证的架构通过不停微服务网关做认证的改进升级的方式满足不断扩大的业务需求。随着应用架构的改变微服务网关做认证,身份认证的方式也在发生变化,为了适应架构的变化、需求的变化,身份认证与鉴权方案也需要不断的变革。

在传统单体应用架构中,身份认证从来都不是问题,简单粗暴的通过一个权限的拦截器,配合session基本都解决了微服务网关做认证!(这里简单说说session, 因为Http协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;session的主要目的就是为了弥补Http的无状态特性。简单的说,就是服务器可以利用session存储客户端在同一个会话期间的一些操作记录。)

在于分布式应用架构中,也有很多处理方式,最流行无非以下几种:

接下主要聊聊在微服务架构中的一些方案和个人理解

采用单点登录方案,意味着每个面向用户的服务都必须与认证服务交互,这会产生大量非常琐碎的网络流量,同时这个防范实现起来也相当的复杂,同时重构相当麻烦,因为需要兼容所有系统。在其他方面,选择SSO方案安全性会很好,用户登录状态是不透明的,可防止攻击者从状态中推断任何有用的信息。

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

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

这个方案意味着所有请求都通过网关,从而有效地隐藏了微服务。 在请求时,网关将原始用户令牌转换为内部会话 ID 令牌。在这种情况下,注销就不是问题,因为网关可以在注销时撤销用户的令牌。

若对过期要求不高的场景,可以不使用Redis,直接使用 JWT 的过期时间即可
登录流程:

验证流程:

微服务网关层

API网关是所有客户端的统一入口。路由服务可以被用于很多目的,例如日志、限流、认证,从而做到应用无感知。API网关对于任意一种处理请求有两种方式处理。一部分请求只要简单路由到相应的服务;还有一些请求需要拆分到多个服务。API Gateway是实现微服务重要的组件之一,常用的网关Zuul, Nginx, Spring Cloud, Linkerd,Envoy,UnderTow。

为了评估API网关各自的性能,我们使用Apache的ab作为压测工具。(另外还可以用Gatling做性能测试)

测试结果和心得如下:

Spring Cloud Gateway + Jwt + Oauth2 实现网关的鉴权操作

随着微服务网关做认证我们的微服务越来越多微服务网关做认证,如果每个微服务都要自己去实现一套鉴权操作微服务网关做认证,那么这么操作比较冗余,因此微服务网关做认证我们可以把鉴权操作统一放到网关去做,如果微服务自己有额外的鉴权处理,可以在自己的微服务中处理。

1、在网关层完成url层面的鉴权操作。

2、将解析后的jwt token当做请求头传递到下游服务中。
3、整合Spring Security Oauth2 Resource Server

1、搭建一个可用的认证服务器, 可以参考之前的文章.
2、知道Spring Security Oauth2 Resource Server资源服务器如何使用, 可以参考之前的文章.

自定义授权管理器,判断用户是否有权限访问
此处微服务网关做认证我们简单判断
1、放行所有的 OPTION 请求。
2、判断某个请求(url)用户是否有权限访问。
3、所有不存在的请求(url)直接无权限访问。

1、 客户端 gateway 在认证服务器拥有的权限为 user.userInfo

3、在网关层面,findAllUsers 需要的权限为 user.userInfo ,正好 gateway 这个客户端有这个权限,所以可以访问。

演示GIF

https://gitee.com/huan1993/spring-cloud-alibaba-parent/tree/master/gateway-oauth2

Spring Cloud Zuul微服务网关的API限流

微服务开发中有时需要对API做限流保护微服务网关做认证,防止网络攻击,比如做一个短信验证码API,限制客户端的请求速率能在一定程度上抵御短信轰炸攻击,降低损失。

微服务网关是每个请求的必经入口,非常适合做一些API限流、认证之类的操作,这里有一个基于zuul微服务网关的API限流库微服务网关做认证

https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit

比如微服务网关做认证我们要对 user-service 这个服务进行限流,限制每个请求源每分钟最多只能请求10次。

首先在项目中添加 spring-cloud-zuul-ratelimit 依赖微服务网关做认证

然后再添加如下配置即可微服务网关做认证

对API限流是基于Zuul过滤器完成的,默认情况下限流数据是记录在内存中的,实际上是用ConcurrentHashMap保存,当然也提供了多种存储方式,包括Redis、Consul、Spring Data JPA,使用这三种存储方式要添加相关依赖。

然后再添加存储配置,比如使用Redis的配置:

限流过滤器是在请求被转发之前调用的

限流类型主要包括url、origin、user三种

在过滤器的run方法中判断请求剩余次数,小于0就拦截请求:

可以看到,单位时间内剩余请求次数小于0时抛出ZuulRuntimeException,直接返回客户端TOO_MANY_REQUESTS异常消息,达到拦截请求的效果。

https://github.com/yunTerry/spring-cloud-netflix 关于微服务网关做认证和微服务统一网关的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 微服务网关做认证的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务统一网关、微服务网关做认证的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实现接口的类不能是抽象类(抽象类可以包含接口方法)
下一篇:Java中对象的比较操作实例分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~