关于JWT token

结合https://blog.csdn.net/qq_37636695/article/details/79265711谈一下如何在java中使用JWT

上述文章说明了在sso简单来说,单点登录SSO(Single SignOn)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录。也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性。以下是sso系统的框架图 在免登陆系统中我们做好token的产生和保存,可以简化整个系统的用户验证。

首先 token是一个String类型的变量,在我的项目中,主要通过JWTHelper.generateToken方法来生成token,

在获得token的时候  步骤如下

1.应用用户的username userid  name 获取一个JWTInfo

IJWTUser jwtInfo = new JWTUser("hjt", "hjt", "hjt");

 

如此,便获得到了一个IJWTUser的类型,存储了用户的id和对象,

2.获得对象之后,应用----一个generateToken函数来获得toekn的具体值方法如下,通过一个IJWTInfo的类型来获得用户的id和对象,一个保存私钥的地址,还有过期的时间。。。。具体方法代码如下:60是过期的时间 ,"d:/pri.key"是私钥的地址

//获取token值
String token=generateToken(info,"d:/pri.key",60);

其具体方法细节如下:

/**
* 密钥加密token 
* @param jwtInfo 包含有用户名称和id的用户对象 
* @param priKeyPath 私钥地址 * @param expire 过期时间 
* @return token 生成的token 
* @throws Exception 
*/ 
public static String generateToken(IJWTInfo jwtInfo, String priKeyPath, int expire) throws Exception { 
String compactJws = Jwts.builder() .setSubject(jwtInfo.getUniqueName())         .claim(CommonConstants.JWT_KEY_USER_ID, jwtInfo.getId()) .claim(CommonConstants.JWT_KEY_NAME, jwtInfo.getName()) .setExpiration(DateTime.now().plusSeconds(expire).toDate()) .signWith(SignatureAlgorithm.RS256, KeyHelper.getPrivateKey(priKeyPath)) .compact(); 
return compactJws; }

首先,通过Builder来获得DefaultJWTbulider来完成后续的操作,setsubject把用户的唯一命名存入标题头,然后对ID、Name进行校验,校验后设置加密的算法和有效的时间,最后进行整合

这里主要是对http标题头的操作,对应的放入http的value值中,这个是以键值对的形式来进行存储的。就比如说.返回值中.clam()(校验)方法 最后是以put(key,value)的形成存入标题头的。而.signwith()中的参数依次代表了,加密的方法、存入的路径。compact就是对上述信息进行加密了。

进行compact加密后就变成了xxxxxxx.xxxxxxxxx.xxxxxxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值