seo网站排名优化公司哪家好,百度免费咨询,淮北建网站费用,哪些网站结构是不合理的本章节讨论 jwt 在 spring boot 中的应用。意在快速入门 jwt。 java jdk1.8maven 3.2spring boot 2.0JSON Web Token#xff08;JWT#xff09; 他是一个用于 Web 身份验证的令牌。 1 JWT 概述 1.1 什么是JWT 直观的理解 JWT 就是一串字符串#xff0c;如下#xff08;来自… 本章节讨论 jwt 在 spring boot 中的应用。意在快速入门 jwt。 java jdk1.8maven 3.2spring boot 2.0JSON Web TokenJWT 他是一个用于 Web 身份验证的令牌。 1 JWT 概述 1.1 什么是JWT 直观的理解 JWT 就是一串字符串如下来自于 JWT.IO eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 细心的你可能会发现字符串是有3个独立的字符串使用.号组合而成前两个字符串是 Base64 编码最后一个字符串是一个加密后的字符串。 序号字符串1eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ92eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ3SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cJWT 使用以上3个字符串组成一个字符串以 xxxxx.yyyyyy.zzzzz 的形式传输给认证服务器 xxxxx.yyyyyy.zzzzz 表示为 Header.Payload.Signature HeadereyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 PayloadeyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ SignatureSflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 我们使用 JWT Debuger 把信息解码可以看出 1.1.1 Header Header 头信息以 json 字符串实现并压缩成 Base64URL 编码字符串传输 {alg: HS256,typ: JWT
} 上面代码中alg属性表示签名的算法algorithm默认是 HMAC SHA256写成 HS256typ属性表示这个令牌token的类型typeJWT 令牌统一写为JWT。 1.1.2 Payload Payload 负载以 json 字符串实现并压缩成 Base64编码字符串传输 {sub: 1234567890,name: John Doe,iat: 1516239022
} 官方对 json 内容节点给出了一些建议我个人觉得意义不大况且那个建议字段完全是看不出任何含义的缩写。比如 iss、exp、sub、aud、nbf、iat、jti。当然如果大家都能共同遵守也不存在这些问题。 iss (issuer)签发人
exp (expiration time)过期时间
sub (subject)主题
aud (audience)受众
nbf (Not Before)生效时间
iat (Issued At)签发时间
jti (JWT ID)编号 1.1.3 Signature VERIFY SIGNATURE 签名在服务端指定一个秘钥把签名两个 json 字符串使用下面方法加密而成的 HMACSHA256(base64UrlEncode(header) . base64UrlEncode(payload),only-save-in-server-secret) 值得注意的是使用JWT 推荐使用 HTTPS 加密协议 1.1.4 Base64URL BASE64URL是一种在BASE64的基础上编码形成新的加密方式为了编码能在网络中安全顺畅传输需要对BASE64进行的编码特别是互联网中。 1.2 JWT 是如何工作的 为了能够支持跨域通常 JWT 的字符串 xxxxx.yyyyyy.zzzzz 通过 Http 的 Head 发送 Authorization: Bearer token 也可以放在 Post 数据体重。 2 Spring Boot JWT 示例 在 JWT 官方可以看到maven: io.jsonwebtoken / jjwt / 0.9.0 这个库是支持最全的。 2.1 新建 Spring Boot Maven 示例工程项目 File New Project如下图选择 Spring Initializr 然后点击 【Next】下一步填写 GroupId包名、Artifact项目名 即可。点击 下一步 groupIdcom.fishpro artifactIdjwt选择依赖 Spring Web Starter 前面打钩。项目名设置为 spring-boot-study-jwt.2.2 依赖引入 Pom.xml ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.6.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.fishpro/groupIdartifactIdjwt/artifactIdversion0.0.1-SNAPSHOT/versionnamejwt/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.4.1/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build
/project2.4 编写 JWT 生成与验证代码 本章节知识学习 JWT不涉及其他知识点故我们之间在 JwtApplication.java 中来编写代码 package com.fishpro.jwt;import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import java.util.*;SpringBootApplication
public class JwtApplication {public static void main(String[] args) {SpringApplication.run(JwtApplication.class, args);String tokencreateJWTToken();//获取生成的TokenverifyJWTToken(token);//验证生成的Token}/*** 生成 JWT Token* */private static String createJWTToken() throws JWTCreationException {String secretsecret;//假设服务端秘钥Algorithm algorithm Algorithm.HMAC256(secret);//jwt 头部信息MapString,Object mapnew HashMap();map.put(alg,HS256);map.put(typ,JWT);Date nowDate new Date();Date expireDate AddDate(nowDate,2*60);//120 分钟过期String token JWT.create().withHeader(map).withIssuer(SERVICE) //对应 paylaod iss 节点签发人.withClaim(loginName,fishpro).withSubject(this is a token demo)//对应 paylaod sub 节点主题.withAudience(Client)//对应 paylaod aud 节点受众.withIssuedAt(nowDate)//对应 paylaod iat 节点生效时间.withExpiresAt(expireDate) //对应 paylaod exp 签发人 节点过期时间.sign(algorithm);return token;}/*** 验证 token* */private static void verifyJWTToken(String token) throws JWTVerificationException {Algorithm algorithmAlgorithm.HMAC256(secret);JWTVerifier verifier JWT.require(algorithm).withIssuer(SERVICE).build();DecodedJWT jwt verifier.verify(token);String subjectjwt.getSubject();MapString,Claim claimsjwt.getClaims();Claim claim claims.get(loginName);System.out.println(自定义 claimclaim.asString());ListString audience jwt.getAudience();System.out.println(subject 值subject);System.out.println(audience 值audience.get(0));}/*** 时间加减法* */private static Date AddDate(Date date,Integer minute){if(nulldate)datenew Date();Calendar calnew GregorianCalendar();cal.setTime(date);cal.add(Calendar.MINUTE, minute);return cal.getTime();}}2.5 演示效果 右键 JwtApplication 选择 Run JwtApplication 观察 console 窗口 转载于:https://www.cnblogs.com/fishpro/p/spring-boot-study-jwt.html