JSON Web Token(JWT)是目前流行的跨域身份验证解决方案。
官网:
https://jwt.io/
本文使用spring boot 2 集成JWT实现api接口验证。
一、JWT的数据结构
JWT由header(头信息)、payload(有效载荷)和signature(签名)三部分组成的,用“.”连接起来的字符串。
JWT的计算逻辑如下:
(1)signature = HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)
其中私钥secret保存于服务器端,不能泄露出去。
(2)JWT = base64UrlEncode(header) + “.” + base64UrlEncode(payload) + signature
下面截图以官网的例子,简单说明
二、JWT工作机制
客户端使用其凭据成功登录时,服务器生成JWT并返回给客户端。
当客户端访问受保护的资源时,用户代理使用Bearer模式发送JWT,通常在Authorization header中,如下所示:
Authorization: Bearer <token>
服务器检查Authorization header中的有效JWT ,如果有效,则允许用户访问受保护资源。JWT包含必要的数据,还可以减少查询数据库或缓存信息。
三、spring boot集成JWT实现api接口验证
开发环境:
IntelliJ IDEA 2019.2.2
jdk1.8
Spring Boot 2.1.11
1、创建一个SpringBoot项目,pom.xml引用的依赖包如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
2、定义一个接口的返回类
package com.example.jwtdemo.entity;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
@Data
@NoArgsConstructor
@ToString
public class ResponseData<T> implements Serializable {
/**
* 状态码:0-成功,1-失败
* */
private int code;
/**
* 错误消息,如果成功可为空或SUCCESS
* */
private String msg;
/**
* 返回结果数据
* */