用户身份认证(三)——JWT
发布日期:2021-05-08 02:12:12 浏览次数:21 分类:精选文章

本文共 1253 字,大约阅读时间需要 4 分钟。

JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以将各方之间的信息作为JSON对象进行安全传输。该信息可以验证和信任,因为其是经过数字签名的。

JWT

1. JWT应用场景

应用场景:

  • Authorization(授权):用户登录后,后续每一个请求均包含JWT,允许用户访问该令牌允许的路由、服务和资源。由于JWT的开销小,并且其可以很方便的跨域使用,因此其广泛应用于当前的单点登录。
  • Information Exchange(信息交换):安全的在各方之间进行信息传输,并且JWT可以被签名和验证是否被篡改。

2. JWT结构

JWT构成:

  • 头部(Header)
  • 有效载荷(Payload)
  • 签名(Signature)

三部分由圆点(.)连接,即:

JWT示例

典型的JWT实例为:

xxx.yyy.zzz

注:

  • 此过程中使用的Base64加密均为url safeBase64加密,由于Base64在编码完成后会加上1个或2个=号,表示补充了多少字节。但是=URL中会造成歧义,因此使用url safeBase64加密;
  • 不要在JWT的Header或Payload中放置敏感信息,除非其进行了加密;

2.1 JWT的头部

Header由两部分组成:

  • typ(Token类型):这里固定为JWT;
  • alg(使用hash算法的类型):例如HMAC、SHA256或RSA等等;

Header部分JSON对象示例:

{   	'typ':'JWT',	'alg':'HMACSHA256'}

然后用Base64对这个JSON对象进行编码,得到Header。

2.2 JWT的有效载荷

Payload功能:

  • 存储需要传递的信息,如用户ID、用户名等等;
  • 包含元数据,如过期时间、发布人等等;
  • 可以进行加密;

其存储的信息按照职能可以分成三个部分:

  • 标准的注册声明(Registered claims);
  • 公共的声明(Public claims);
  • 私有的声明(Private claims);
{   	'user_id':'1033180491',	'user_name':'lime2019'}

然后用Base64对这个JSON对象进行编码,得到Payload。

2.3 JWT的签名

对Header和Payload部分进行签名,保证Token在传输的过程中没有被篡改或者损坏。

签名算法为Header中指定的那一个,通过一个私钥对Header和Payload使用签名算法进行加密。

Signature = HMACSHA(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

3. JWT的特点

JWT特点:

  • 简洁:可以通过URL、POST参数或者在HTTP header发送,因为数据量小,所以传输速度很快;
  • 自包含:负载中包含所有用户需要的信息,避免多次查询数据库;

4. JWT的使用

上一篇:Koa学习(一)——Koa介绍
下一篇:IOT开发学习(一)——物联网(Internet of Things)与万维物联网(Web of Things)

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月04日 11时39分43秒