JWT Token认证实现
简单说明
JWT Token是Token Auth认证的一种实现方式,当用户将用户名和密码发送到服务器认证且认证通过后,服务器会将认证后的一些信息 例如:认证过期时间、用户名、用户的访问权限等,将这些信息加密成一个字符串(即token)后返回给客户端,返回的形式可以是Cookie形式也可以是json格式返回。每次用户请求新页面时只需把该字符串携带上即可。
JWT Token在加密认证后的信息时,会使用加密算法+密钥的形式生成一个token字符串,token字符串上有一段加密后的签名字符串,用户请求资源时 服务端会先使用密钥验证token的签名字符串,由于密钥是服务器上私有的,只有服务器自己知道,所以确保了验证的安全性,当使用密钥验证签名失败时,则认证该用户认证失败
JWT token的组成和生成过程
一个JWT token字符串由三部分组成:头部(header)、载荷(payload)、签名(signature)
形成一个JWT token字符串的步骤,sign()是生成token的方法:
1 | private String sign() throws SignatureGenerationException { |
头部(header)
JWT有一个头部,头部用于描述JWT的基本信息,一共有两个属性
- typ:用于描述token字符串的类型,默认会填入“JWT”
- alg:签发时使用的签名或算法
载荷(payload)
载荷有固定的部分,也可以传入自定义的属性,自定义的内容可以是用户名、用户权限等,下面是固定的属性
- iss:该JWT签发的主体,即谁生成了这个JWT
- sub:该JWT的所有人,可以看成是客户端
- aud:该JWT的接收对象
- iat:一个时间戳,表示该JWT的签发时间
- nbf:一个时间戳,表示该JWT的生效时间
- exp:一个时间戳,表示该JWT的过期时间
- jti:JWT的唯一标识符
签名(signature)
签名没有属性值,但是在形成签名时需要传入密钥
JWT Token实现
引入依赖
1 | <dependency> |
1 | //获取指定过期时期和自定义载荷的token |