JWT面试总结

什么是JWT

json web token 简称jwt,是应用程序上的用户进行身份验证时的标志。使用jwt的应用程序可以不用存储客户端的cookie和其他的session等数据。提高了延伸性和应用程序的安全性。

在用户进行身份验证的时候,当用户根据凭证成功登录时,会在客户端返回jwt,必须在本地保存(通常在本地存储中)。

当用户访问受保护的资源和路由的时候,前端代理会向后端发送请求,并将jwt保存在请求的授权标头中,后端接收jwt并验证token的有效性。

JWT的组成

jwt实际上就是一个字符串,它主要是由三部分组成的。头部(header)载荷(payload)签名(signature)

头部(header)

主要是用来存放基本信息的,主要是包含jwt基本类型和jwt签名的算法,可以将其表示成为一个json对象。

eg:{ " typ " : " JWT " , " alg " : " HS256 " }

载荷(payload)

主要是用来存放有效信息的,主要包含三个部分:

标准中注册的声明:

iss:jwt签发者      sub:jwt面向的对象    aud:jwt返回的一方     exp:jwt过期时间,过期时间要大于签发时间        isa:jwt签发时间         nbf:在规定时间之前,jwt失效      jti:jwt的id,用于唯一标识jwt

公共声明:

可以存储jwt任何信息,一般用来存储和用户相关的信息和业务有关的必要信息,一般不建议存储用户的隐私信息,因为在客户端会被解密

私有声明:

是持有者和消费者共同定义的声明,一般不建议存储用户的隐私信息,因为base64会被对称解密,该类信息可以被归类为明文信息

签名(signature)

这一部分也是由三部分组成的:header(base64编码) payload(会被base64编码)  secret

由被base64编码的header和payload使用“.”连接组成的字符串,被header中的加密算法和加盐secret共同加密

JWT场景问题

1. http中的token泄露了怎么办?

首先使用https对程序进行加密,将返回客户端的jwt设置其httponly=true,并且使用cookie存储而不是localstorage,这样可以防止XSS攻击和CSRF攻击

2. 如何设计secret?

jwt存储在服务端的secret只有一个,因此个人认为应该将其设置为和用户相关的属性,而不是所有用户都能使用的统一值,从而避免用户注销和修改密码产生的尴尬。

3. 多次登录生成的token是否一样?是否有效?

单点登录中多次登录生成的token是一样的,但是可以在jwt的payload加上时间戳,从而使其不同,都是有效的。

4. 单点登录如何实现?

1. 用户访问其他服务的时候,网关会验证token的有效性

2. 如果token无效,则返回401(即认证失败),跳转到登陆页面

3. 当发送登录请求时,返回浏览器一个token,将其保存到cookie中

4. 再次访问其他服务的时候,会携带这个token,网关会验证token的有效性,如果有效则路由到目标服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值