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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值