JWT加密规则

编程入门 行业动态 更新时间:2024-10-10 21:30:13

JWT加密<a href=https://www.elefans.com/category/jswz/34/1771204.html style=规则"/>

JWT加密规则

JWT加密规则


JWT(Java Web Token)是基于token的身份认证的方案,可以保证安全传输的前提下传送一些基本的信息,JWT的安全特性保证了token的不可伪造和不可篡改。本质上是一个独立的身份验证令牌,可以包含用户标识、用户角色和权限等信息,以及您可以存储任何其他信息(自包含)。任何人都可以轻松读取和解析,并使用密钥来验证真实性。JWT包含如下三部分:

  1. 头部(header): {“alg”:“HS256”} , 使用base64编码
  2. 载荷(playload): {“jti”:“18cba4db-3877-4738-b137-5b8ff5a53727”,“iat”:1608180072,“sub”:“{“code”:“工号”}”,“exp”:1608180132}, 使用base64编码
    Jti: JWT的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
    Iat: JWT的签发时间
    Sub: JWT所面向的用户
    Exp: JWT的过期时间,这个过期时间必须要大于签发时间
  3. 签证(signature): base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过头部声明的HS256加密方式进行检验secret组合加密将这三部分用“.”连接成一个完整的字符串,构成了最终的JWT

示例
1.生成一个token:
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ZjkwNTBhYS1iYzA4LTRmMjUtOGUyNi05YzU1Mjc2MmYzY2IiLCJpYXQiOjE2MDgyNTgzMzUsInN1YiI6IntcImNvZGVcIjpcIjAwMVwifSIsImV4cCI6MTYwODI1ODQzNX0.N3tOp24jKKTrQk4YJUb4BLsYqd1Rs9Lha99J7fJ_uoA
头部为:eyJhbGciOiJIUzI1NiJ9
释:头部由{“alg”:“HS256”}使用Base64加密得来
荷载为:eyJqdGkiOiI1ZjkwNTBhYS1iYzA4LTRmMjUtOGUyNi05YzU1Mjc2MmYzY2IiLCJpYXQiOjE2MDgyNTgzMzUsInN1YiI6IntcImNvZGVcIjpcIjAwMVwifSIsImV4cCI6MTYwODI1ODQzNX0
释:荷载由{“jti”:“5f9050aa-bc08-4f25-8e26-9c552762f3cb”,“iat”:1608258335,“sub”:“{“code”:“001”}”,“exp”:1608258435}使用Base64加密得来
签证为:N3tOp24jKKTrQk4YJUb4BLsYqd1Rs9Lha99J7fJ_uoA
加密密钥为:jdsaklREKJNS231NKLS
释:签证使用头部与荷载配合加密密钥
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ZjkwNTBhYS1iYzA4LTRmMjUtOGUyNi05YzU1Mjc2MmYzY2IiLCJpYXQiOjE2MDgyNTgzMzUsInN1YiI6IntcImNvZGVcIjpcIjAwMVwifSIsImV4cCI6MTYwODI1ODQzNX0通过配合加密密钥使用HS256加密方式进行检验加密。
JAVA代码(JWT加密)
下面展示一些 内联代码片

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jJWT</artifactId><version>0.7.0</version>
</dependency><dependency><groupId>com.auth0</groupId><artifactId>java-JWT</artifactId><version>2.2.0</version>
</dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version>
</dependency>
package com.gloudtek.service;import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.*;
import org.apachemons.codec.binary.Base64;import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Date;
import java.util.UUID;public class JTWEncryption {// 加密密钥static String SECRETKEY = "csdnyyds";// 由字符串生成加密keypublic static SecretKey generalKey(String stringKey) {byte[] encodedKey = Base64.decodeBase64(stringKey);SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");return key;}/*** 创建JWT* @param uuid  唯一id* @param subject  json形式字符串或字符串,可存用户工号,不可存储敏感信息,例如:密码,与token解析后进行对比,防止乱用* @param expirationDate  生成JWT的有效期,单位秒* @return* @throws Exception*/public static String createJWT(String uuid, String subject, long expirationDate) throws Exception {SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);SecretKey key = generalKey(SECRETKEY);JWTBuilder builder = JWTs.builder().setIssuer("").setId(uuid).setIssuedAt(now).setSubject(subject).signWith(signatureAlgorithm, key);if (expirationDate >= 0) {long expMillis = nowMillis + expirationDate*1000;Date exp = new Date(expMillis);builder.setExpiration(exp);}return builderpact();}/*** 实例演示*/public static void main(String[] args) {JSONObject subject = new JSONObject(true);subject.put("code", "001"); //工号//加密try {String token = createJWT(UUID.randomUUID().toString(), subject.toJSONString(), 100);//100秒过期System.out.println(token);} catch (Exception e) {e.printStackTrace();}}
}

更多推荐

JWT加密规则

本文发布于:2024-03-04 14:15:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709490.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:规则   JWT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!