jwt相关介绍及使用

JWT:JSON Web Token是目前最流行的跨域认证解决方案,用户身份的认证以前我们都是怎么做的呢,一般步骤都是这样的:用户将用户名及密码传输到服务器,服务器认证通过后将用户相关信息保存到session中,然后返回session_id将其写到用户的cookie中,用户后面所有请求都会通过cookie将session_id传输到后台,后台通过session_id可以对用户进行身份认证。这种方案在单机情况下没有问题,但是在集群环境下就必须要求session数据共享,这个问题我们在spt的开发开始就遇到过,我们处理方案是通过将session存储到redis中,然后改变tomcat服务器的session读取逻辑,该方案对于Tomcat的版本有要求,同时需要对每一台tomcat进行处理,由于session持久化到redis中所以也存在session丢失的可能。而jwt是将用户信息完全以加密的形式返回给客户端,客户端每次发送请求时都将该信息发送到服务器进行身份验证,也就是服务器端不再保存session信息,即服务的无状态。

原理

JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,格式如下:{ "username": "cys", "权限": "/api/user", "expire": "2018-10-28 00:00:00" } ,用户与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。 服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。

使用方式

客户端收到服务器返回的 JWT,可以储存在 cookie 里面,也可以储存在 localStorage。 此后,客户端每次与服务器通信,都要带上这个 JWT。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面。 Authorization: Bearer 另一种做法是,跨域的时候,JWT 就放在 POST 请求的数据体里面。

后台集成

目前后台用的spring boot,所以主要就是介绍spring boot如何集成jwt

1、pom文件中添加maven依赖如下:


2、security中不对登录及其他请求进行拦截,配置如下:


3、登录时操作如下:


4、接口调用时操作如下:


主要操作有,获取到用户的token,通过服务器的私钥判断该token是否合法,然后获取用户的权限判断当前请求是否合法。

你可能感兴趣的:(jwt相关介绍及使用)