解决方案:微服务网关实现简单鉴权
关键词
- JWT(xxxxx.yyyyy.zzzzz)
- JJWT工具
- 网关过滤器解析TOKEN
在网关系统中比较适合进行权限校验


一、微服务架构下统一认证思路
-
基于Session的认证方式
在分布式的环境下,基于session的认证会出现一个问题,每个应用服务都需要在session中存储用户身份信息,通过负载均衡将本地的请求分配到另一个应用服务需要将session信息带过去,否则会重新认证。我们可以使用Session共享、Session黏贴等方案。Session方案也有缺点,比如基于cookie,移动端不能有效使用等
-
基于Token的认证方式
优点:服务端不用存储认证数据;易维护扩展性强;客户端可以把token 存在任意地方;可以实现web和app统一认证机制缺点:token由于自包含信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占带宽。另外,token的签名验签操作也会给cpu带来额外的处理负担
二、基于Token的认证方式(JWT)
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。每部分中间使用点(.)分隔,比如:xxxxx.yyyyy.zzzzz
2.1 头部(Header):
作用:在头部指明了签名算法
例如:{“typ”:“JWT”,“alg”:“HS256”}
将上边的内容使用Base64Url编码,得到一个字符串就是JWT令牌的第一部分
2.2 载荷(playload):
作用:载荷就是存放有效信息的地方
例如:{“sub”:“1234567890”,“name”:“John Doe”,“admin”:true}
将其进行base64加密,得到Jwt的第二部分
2.3 签名(signature):
作用:jwt的第三部分是一个签证信息,这个签证信息由三部分组成
- header (base64后的)
- payload (base64后的)
- secret
例如:HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload)+ secret )
三、使用JJWT工具 实现 token的签发与验证
JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。
3.1 创建token
1)在项目中的pom.xml中添加依赖
<dependencies>
<!--JJWT依赖-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId

本文详细介绍了在微服务架构中如何利用JWT进行简单鉴权,包括JWT的工作原理、JJWT工具的使用、创建和验证Token的过程,以及如何在网关中实现Token的校验,确保权限控制。
最低0.47元/天 解锁文章
1110

被折叠的 条评论
为什么被折叠?



