微服务网关验证jwt(微服务网关实现的功能)

网友投稿 452 2022-12-31


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

本文目录一览:

JWT 认证过程

A JWT token contains a Header, a Payload, and a Signature.

Header
Header contains the algorithms like RSA or HMACSHA256 and the information of the type of Token.

Payload
Payload contains the information of rows, i.e., user credentials.

How Does JWT Work?

Step 1

Client logs in with his/her credentials.

Step 2

Server generates a Jwt token at server side.

Step 3

After token generation, the server returns a token in response.

Step 4

Now, the client sends a copy of the token to validate the token.

Step 5

The server checks JWT token to see if it's valid or not.

Step 6

After the token is validated, the server sends a status message to the client.

[图片上传中...(-4ee818-1642837712343-0)]

授权流程:
1、用户请求登录,携带用户名密码到授权中心
2、授权中心携带用户名密码,到用户中心查询用户
3、查询如果正确,生成JWT凭证
4、返回JWT给用户
鉴权流程:
1、用户请求某微服务功能,携带JWT
2、微服务将jwt交给授权中心校验
3、授权中心返回校验结果到微服务
4、微服务判断校验结果,成功或失败
5、失败则直接返回401
6、成功则处理业务并返回

微服务架构认证鉴权方案

微服务架构中推荐采用无状态 API 模式,主要有两种方案比较普遍。其中 OAuth2.0 能够完全满足。此外 JWT 除了不能满足 SSOff(一次登出全部登出) 外,其他都能满足,且是所有方案里最为简便轻巧的一个,可通过搭配 API 网关来满足 SSOff 特性的要求,因此 JWT + API 网关也是一个推荐的方案。

API 网关作为服务访问的统一入口,所有用户请求都会过 API 网关,很适合用来做认证鉴权这类切面型服务。网关可以拦截用户请求,获取请求中附带的用户身份信息,调用认证授权中心的服务,对请求者做身份认证,即确认当前访问者确实是其所声称的身份,检查该用户是否有访问该后台服务的权限。

目前主流的认证鉴权方案有 2 种。

第一种是引入 Redis 做分布式会话,即用户登录成功后,将用户身份、权限信息存入 Redis,以一个唯一 ID 作为 Key,并设置信息在 Redis 里的失效时间。这个唯一 ID 的 Key 将返回给客户端,客户端可以放入 Cookie,sessionStorage 等处做本地存储。下次访问的时候,将这个唯一 ID 放入请求参数中一起发送(一般放入 Header)。服务端通过检查 Redis 里有无这个 ID 来判断用户是否登录,获取用户身份和权限信息。客户端如果长时间没有操作,则存储在 Redis 里会话信息过期自动删除。客户端每访问一次服务端,需刷新一次会话信息的过期时间,避免固定过期时间带来的低用户体验。

第二种是 JWT,即 Java Web Token。用户登录成功后,服务端向客户端返回的唯一 ID 不再是无意义的字符串,而是包含了用户身份、权限、失效时间等信息的加密字符串。并且这个字符串包含数字签名,服务端可对这个字符串做数字签名验签,确保该字符串未经篡改和伪造。相比分布式会话方案,JWT 虽省去了 Redis 存储,但是每次访问都要做数字签名验证,增加了 CPU 的资源损耗。

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-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 关于微服务网关验证jwt和微服务网关实现的功能的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 微服务网关验证jwt的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务网关实现的功能、微服务网关验证jwt的信息别忘了在本站进行查找喔。

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

上一篇:包含视听系统接口设计方案的词条
下一篇:接口能不能实现接口(什么是接口,怎样实现接口)
相关文章

 发表评论

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