1、什么是JWT?主要用来做什么?
JWT:Json Web Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换
2、JWT由几部分组成?分别是什么?
一个JWT实际上就是一个字符串,它由三部分组成:头部、载荷与签名 header.payload.signature
Header
{
"alg": "HS256",//表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256
"typ": "JWT"//表示这个令牌(token)的类型(type),JWT 令牌统一写为JWT
}
Payload
{
iss (issuer)://签发人
exp (expiration time)://过期时间
sub (subject)://主题
aud (audience)://受众
nbf (Not Before)://生效时间
iat (Issued At)://签发时间
jti (JWT ID)://编号
}
Signature
指定的签名算法(默认是 HMAC SHA256)
3、token返回给客户端之后,服务端还要保存吗?
服务端不需要保存
4、校验token时,怎么保证数据并没有被黑客拦截并篡改?
signature中有私钥来进行签名,可以保证安全性
5、token颁发给客户端之后,要不要有过期时间?
需要设置token过期时间
6、多次登录生成的token都是一样的吗?都是可用的吗?
可以再payload加上时间戳,来保证每次生成的token都不一样,都是可用的
7、单点登录怎么实现?
单点登录的三种常用实现方式
1.利用session广播机制实现
参与集群的每个节点的Session状态都被复制到集群中的其他所有节点上,无论何时,只要Session发生改变,Session数据都要重新被复制Tomcat、JBoss、was都提供了这样的功能,其中Tomcat采用集群节点广播复制,JBoss采用配对复制机制
优点:每个节点都复制一份Session,一个节点出现问题时其它节点可以接替它的工作
缺点:节点间进行Session同步会占据不少系统资源,整体性能随着集群节点数的增加而急剧下降
2.使用cookie+redis实现
(1)客户端第一次登陆时,通过服务端产生cookie和一个与之对相应的session
(2)将第一次登录产生的cookie和User对象(登录所需信息),以key-value的形式存储在Redis中
(3)当客户端再次访问另外需要登录操作的页面时,将该客户端的cookie拿到Redis中进行比对,如果存在,则视为已登录
(4)因为session是存在有效期的,所以可以在Redis中设置与之对相应的有效时间
3.使用token实现
(1)构SSO服务站点
(2)客户端第一次登录时在SSO站点获取登陆凭证
(3)客户端拿着登陆凭证去服务端登录
(4)服务端拿着客户端的登陆凭证去寻找SSO服务站点进行校验
(5)SSO校验成功并通知服务端该客户一登录,可以进行下一步操作