Browse Source

完成jwt 整体测试

master
xyiege 4 years ago
parent
commit
dc5fbb31b8
  1. 4
      README.md
  2. 2
      pom.xml
  3. 54
      src/main/java/cn/chjyj/szwh/utils/ApiTokenUtils.java
  4. 17
      src/test/java/cn/chjyj/szwh/JwtRsaTokenTests.java
  5. 2
      szwh.iml

4
README.md

@ -30,3 +30,7 @@ eyJhbGciOiJIUzUxMiJ9.eyJhdWQiOiJCRDg0REQ0MkE3MjM0QjA1QjBDNUQxMTYxNjEzMkFDNCIsImp
3、[Java读取OpenSSL生成的PEM公钥文件操作](http://www.zzvips.com/article/108821.html) 3、[Java读取OpenSSL生成的PEM公钥文件操作](http://www.zzvips.com/article/108821.html)
4、[java - 如何读取.pem文件以获取私钥和​​公钥](https://mlog.club/article/130323) 4、[java - 如何读取.pem文件以获取私钥和​​公钥](https://mlog.club/article/130323)
5、 [JWT的加密解密原理,token登出、改密失效、自动续期](https://blog.csdn.net/u013733643/article/details/123468855)
6\ [token中的JWT加密解密算法分析](https://johnnycc.com/index.php/archives/130/)

2
pom.xml

@ -64,7 +64,7 @@
<dependency> <dependency>
<groupId>commons-codec</groupId> <groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId>
<version>1.9</version> <version>1.10</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>

54
src/main/java/cn/chjyj/szwh/utils/ApiTokenUtils.java

@ -1,9 +1,11 @@
package cn.chjyj.szwh.utils; package cn.chjyj.szwh.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import javax.xml.bind.DatatypeConverter;
import java.security.Key; import java.security.Key;
import java.security.KeyFactory; import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
@ -18,37 +20,8 @@ import java.util.Map;
/** /**
* token 生成与验证工具 * token 生成与验证工具
* @outhor dong.jun
* @create 2022-06-13 16:23
* @company 深圳亿起融网络科技有限公司
*/ */
public class ApiTokenUtils { public class ApiTokenUtils {
/**
* cloudhub_token生成测试
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String issuer = "test";
Map<String, String> stringStringMap = new HashMap<>();
String cloudhub_token = getToken(
issuer, //从天朗获取
stringStringMap.get("private_key"), //从天朗获取
5 * 60 * 1000L
);
System.out.printf(
"issuer: %s\n" +
"pri_key: %s\n" +
"cloudhub_token: %s\n" +
"check: %b\n",
issuer,
stringStringMap.get("private_key"),
cloudhub_token,
Jwts.parser().setSigningKey(stringToPublickKey(stringStringMap.get("public_key"))).parseClaimsJws(cloudhub_token) != null
);
}
/** /**
* @param iss 从天朗获取 * @param iss 从天朗获取
* @param pri 从天朗获取 * @param pri 从天朗获取
@ -79,6 +52,19 @@ public class ApiTokenUtils {
.compact(); .compact();
} }
/**
* 解析jwt token
* 公钥解密
* @param jwt
* @return
*/
public static Claims parseJWT(String jwt,String pubkey) throws Exception {
return Jwts.parser()
.setSigningKey(pubkey)
.parseClaimsJws(jwt)
.getBody();
}
/** /**
* 抽取公钥 * 抽取公钥
* @param publicKey * @param publicKey
@ -97,7 +83,6 @@ public class ApiTokenUtils {
new X509EncodedKeySpec(decoded); new X509EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance("RSA"); KeyFactory kf = KeyFactory.getInstance("RSA");
return (RSAPublicKey) kf.generatePublic(spec); return (RSAPublicKey) kf.generatePublic(spec);
//return (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(publicKey.getBytes())));
} }
/** /**
@ -115,15 +100,6 @@ public class ApiTokenUtils {
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded); PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance("RSA"); KeyFactory kf = KeyFactory.getInstance("RSA");
return (RSAPrivateKey)kf.generatePrivate(spec); return (RSAPrivateKey)kf.generatePrivate(spec);
//return (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(privateKey.getBytes())));
} }
public static Key stringToPublickKey(String key) throws NoSuchAlgorithmException, InvalidKeySpecException {
return getPublicKey(key);
}
public static Key stringToPrivateKey(String key) throws Exception {
return getPrivateKey(key);
}
} }

17
src/test/java/cn/chjyj/szwh/JwtRsaTokenTests.java

@ -4,6 +4,10 @@ import cn.chjyj.szwh.constant.ChConstant;
import cn.chjyj.szwh.utils.ApiTokenUtils; import cn.chjyj.szwh.utils.ApiTokenUtils;
import cn.chjyj.szwh.utils.JwtUtils; import cn.chjyj.szwh.utils.JwtUtils;
import cn.chjyj.szwh.utils.SzFileUtils; import cn.chjyj.szwh.utils.SzFileUtils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import io.jsonwebtoken.Claims;
import org.junit.Test; import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@ -31,8 +35,9 @@ public class JwtRsaTokenTests {
String entr_prikey=prop.getProperty("entrust.pem.prikey.path");//私钥路径 String entr_prikey=prop.getProperty("entrust.pem.prikey.path");//私钥路径
// 私钥 // 私钥
String prinote = SzFileUtils.getKeyFromFile(ChConstant.WORK_DIR + "/" + entr_prikey); String prinote = SzFileUtils.getKeyFromFile(ChConstant.WORK_DIR + "/" + entr_prikey);
// System.out.println(prinote); System.out.println(prinote);
String iss ="test"; String iss ="test";
// 5分钟后过期
long exp =5 * 60 * 1000L; long exp =5 * 60 * 1000L;
String token = ApiTokenUtils.getToken(iss,prinote,exp); String token = ApiTokenUtils.getToken(iss,prinote,exp);
System.out.println(token); System.out.println(token);
@ -41,4 +46,14 @@ public class JwtRsaTokenTests {
} }
} }
@Test
public void parseJwtTest(){
//待解密
String jtoken="eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJ0ZXN0IiwiZXhwIjoxNjU2NTI1NzQyLCJpYXQiOjE2NTY1MjU0NDJ9.LX2Y5sS5MpA7scYCATRX54WhpUplHEXZ-mbIiqkozhJyj3HOKMbmraPKMN79H4j_MR1721BIKf448C-5nOSul2wEJpjXw11e0KA5FpJtN_k7V8TblK3M4_o-jxjgBFTfg6-jdvKNL08LyMaMGT6fMmCtazaDDw-7L0s0US7NyOOFDSBgK8tF_NkzF0U-WKk8372JnYAoFLIa9iuHMxruZbxJJaDygLPbVlDzvyWMW-AInhU9iOeGaOuQqQhmsBYbuC8mM_cfYpRTFFVYsOh7lyIPKsR4t0lvsVkuNZ2zQeEHKddB2ZfIRYZHNdTtaaHGcU_P4sO7V6fPqlANu2a7v_86uljv-eYPYn2MLaXruI8cLvhJPi_27Z9DfUWVIK6l2TIjvVK0TuMc54f3ltKaYTzKTqIhjw8c55Gkg0MAI-1FDFjpxpD0FG9S3VspO8b3lVnCAWUHyJW71UeS8XX2H1V-s2b2-uSxbd3mRmq9vwOYkg9ZdfSi4COMaqiIGpQY0iZMIdP9JfvPAvJ1lQO-PgovNIbEXP99zbvzrXHTIv2SMP4Uc4t458zbMfovLmwjc9XIrn_EJKYfyPM_FbIK7EyRk3Ok5omEWIoYaOTfqSvT6OEQdS663-_oTMvCrLbQ66T6m4QFnp7RvyHnmIgTZZRA_PSvF93A0aJfjXdtbAA\n";
DecodedJWT decode = JWT.decode(jtoken);
String out = decode.getClaim("iss").asString();
// String out = decode.getPayload();
System.out.println(out);
}
} }

2
szwh.iml

@ -109,7 +109,7 @@
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" /> <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" /> <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" /> <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />

Loading…
Cancel
Save