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的生成和检验的更多相关文章
- ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成
在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Crypt ...
- token的生成和应用
token的生成和应用 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程: ...
- JWT实现token的生成和认证demo
上篇写到对JWT的理解,这篇写一个小的demo来实践下 Github:https://github.com/wuhen152033/token/tree/dev 简介 本次的demo是基于Spring ...
- JSON Web Token (JWT)生成Token及解密实战。
昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下. https://githu ...
- php token的生成
转载自:http://blog.snsgou.com/post-766.html --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的 ...
- token的生成规则
1.token生成规则要添加时间戳,timestamp,以便解析token时,可以根据判断时间超过30分钟不予处理.像session过期时间一样.
- [Python]token的生成及验证
hmac模块(仅在python3中可以使用) 简介: HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出. 典型应用: HMAC的一 ...
- php token的生成和使用
原文连接:http://ukagaka.github.io/php/2018/05/08/JWT.html 1. 为什么要使用tokent进行登录 前后端分离或者为了支持多个web应用,那么原来的co ...
- Java实现token的生成与验证-登录功能
一.token与cookie相比较的优势1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而 ...
随机推荐
- 2017/2/14:JSTL标签与el表达式
一.JSTL标签介绍 1.什么是JSTL? JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...
- create a plugin for PowerShell ISE
可参考:Creating Add-ons, Plugins, and Tools for the PowerShell ISE http://www.leeholmes.com/blog/2013/0 ...
- Peter的烟(水题测试2017082401&洛谷1150)
题目链接:Peter的烟 这道题基本做法很水,不解释. #include<bits/stdc++.h> using namespace std; int main(){ int n,k; ...
- 乘积最大(NOIP2000&NOIP水题测试(2017082301))
题目链接:乘积最大 这道题显然是道区间dp. 难度不是很大. 思路也很清晰. 我们设计一个三维状态. ans[l][r][k] 这里表示在闭区间[l,r]上操作k次的最大值. 操作就是加乘号. 转移也 ...
- 为什么要选择OMP之合规性
- unity在一个对象上挂多个一样的脚本怎么获取
使用GetComponents获取,存到一个该类的数组里
- Bubble(冒泡排序)————Java
用Java进行冒泡排序的代码,利用一个flag进行优化算法: import java.util.Scanner; public class Bubble_Sort { private static i ...
- 33、iOS10 由于权限问题导致崩溃的大坑
控制台报忠告: This app has crashed because it attempted to access privacy-sensitive data without a usage d ...
- 2019.01.22 bzoj2874: 训练士兵(主席树)
传送门 题意简述:给出一个n∗mn*mn∗m的矩阵n,m≤1e8n,m\le1e8n,m≤1e8,支持矩形加,矩形求和,强制在线. 思路:第一眼二维动态开点线段树,上网去搜有没有这种做法发现会被卡时空 ...
- 执行sh脚本文件下载Github上的代码(雷霄骅的ffmpeg示例代码)
今天想重新学习下ffmpeg,于是又来到了雷晓骅的博客,先下载了他的所有代码,这里记录一下在Windows上使用sh脚本下载GitHub上代码的过程. CygWin(最后并没有用到) 可以 ...