以前单体应用控制登录session就够了,后来对于多客户端,可以用cas做统一认证,之前也成功配置过cas5.3.9实现多客户端单点登录单点登出案例,但是也很麻烦,最大的缺点是cas还要另起一个用来做统一认证的服务,占用一个端口,而且也很吃内存,相似原理的还可以用redis等缓存数据库弄一个共享缓存,也可以实现多客户端单点登录的功能,但是这两个的方法都要额外占用端口和服务,直到了解到JWT。
JWT是用java写的,可以生成一个独一无二的token字符串。
包括Header,Claim,ExpiresAt,sign,Header通常由两部分组成:令牌的类型,即JWT。和常用的散列算法,如HMAC SHA256或RSA。
例如:
{
"alg": "HS256",
"typ": "JWT"
}
Header部分的JSON被Base64Url编码,形成JWT的第一部分。
Clainm是要加密的StringId,ExpiresAt可以设置过期时间,sign可以自己私加密匙,如此:
JWT.create()
.withHeader(header)
.withClaim("userId", userId)
.withExpiresAt(date)
.sign(algorithm);
便可以创建出一个加密的token字符串,通过把这个字符串分发给其他客户端就可以识别是不是同一个用户,是哪个用户,从而很简单的实现单点登录。