JWT面试题

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校验成功并通知服务端该客户一登录,可以进行下一步操作


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部