Token的生成和检验
Posted Androidc_CY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Token的生成和检验相关的知识,希望对你有一定的参考价值。
package TestToken; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import org.junit.Test; import java.io.UnsupportedEncodingException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; public class TokenTest { //公共密钥客户端不会知道 public static String SECRET="FreeMaNong"; public static String createToken() throws UnsupportedEncodingException { //签名发布时间 Date iatDate=new Date(); System.out.println(iatDate);//英文时间 //设置签名过期时间 1分钟 Calendar nowTime=Calendar.getInstance(); nowTime.add(Calendar.MINUTE,1); Date expiresDate=nowTime.getTime(); //System.out.println(expiresDate); Map<String,Object> map=new HashMap<String, Object>(); map.put("alg","HS256");//设置算法 为HS256 map.put("typ","JWT");//设置类型为JWT String token=JWT.create().withHeader(map) .withClaim("name","Free码农") .withClaim("age","28") .withClaim("org","今日头条") .withClaim("username","chenyu") .withIssuedAt(iatDate)//设置签发时间 .withExpiresAt(expiresDate)//设置过去时间 过期时间大于签发时间 .sign(Algorithm.HMAC256(SECRET));//用公共密钥加密 //System.out.println(token); return token; } public static Map<String,Claim> verifyToken(String token) throws UnsupportedEncodingException { JWTVerifier verifier =JWT.require(Algorithm.HMAC256(SECRET)).build();//用公共密钥解密验证 DecodedJWT jwt=null; try{ jwt=verifier.verify(token); }catch (Exception e) { throw new RuntimeException("登录凭证已过去,请重新登录"); } return jwt.getClaims(); } @Test public void TestToken() throws UnsupportedEncodingException { String token=createToken(); System.out.println("Token:"+token); Map<String,Claim> claims=verifyToken(token); System.out.println(claims.get("name").asString()); System.out.println(claims.get("age").asString()); System.out.println(claims.get("username").asString()); System.out.println(claims.get("org")==null?null:claims.get("org").asString()); //测试过期token // String GuoQiToken="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhdXRoMCJ9.izVguZPRsBQ5Rqw6dhMvcIwy8_9lQnrO3vpxGwPCuzs"; // Map<String,Claim> claims2=verifyToken(GuoQiToken); } @Test public void Test() throws UnsupportedEncodingException { Algorithm algorithm = Algorithm.HMAC256("secret"); String token = JWT.create().withIssuer("auth0") .sign(algorithm); System.out.println(token); } }
以上是关于Token的生成和检验的主要内容,如果未能解决你的问题,请参考以下文章
两段检验系统生成的identityHashCode是否重复的代码
add application window with unknown token XXX Unable to add window;is your activity is running?(代码片段
add application window with unknown token XXX Unable to add window;is your activity is running?(代码片段
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段