nodejs学习笔记(15)-jwt登录鉴权(1)
为什么需要JWT
?
- 我们之前学到的
Session
认证机制需要配合Cookie
才能实现,且由于Cookie
是不支持跨域访问的, 因此,当涉及到前端跨域请求后端接口
的时候,需要做很多额外的配置,才能实现跨域 Session 认证
。 - 注意
- 当
前端请求后端接口不存在跨域问题
的时候,推荐使用Session
身份认证机制。 - 当
前端需要跨域请求后端接口
的时候,不推荐使用Session
身份认证机制,推荐使用JWT
认证机制。
- 当
什么是JWT
?
JWT
(英文全称:JSON Web Token
)是目前最流行的跨域认证解决方案
。- 它遵循
JSON
格式(因此不存在跨域问题),将用户信息加密到token
里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token
,通过token
验证用户身份。基于token
的身份验证可以替代传统的cookie+session
身份验证方法。
JWT
的工作原理:
总结
- 用户登录提交信息到服务器 , 服务器将用户提交的信息通过特定的密钥加密成一个
token
字符串, 随后相应给客户端, 客户端再将响应回来的token
字符串主动的保存到浏览器当中(localstorage
,localsession
), 今后凡是需要进行身份验证的时候, 客户端就会通过请求头里面的Authorization
这个字段, 将token
发送给服务器, 服务器就会将这个token
还原成用户的信息对象, 从而对用户的身份进行认证
JWT
的组成部分
JWT
通常由三部分组成,分别是Header
(头部)、Payload
(有效荷载)、Signature
(签名)。- 三者之间使用英文的“.”分隔(这个.号只有分隔的作用),格式如下:
Header.Payload.Signature |
- 生成的
Token
示例如下:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ |
这三个部分的作用
Payload
部分才是真正的用户信息
,它是用户信息经过加密之后生成的字符串。Header
和Signature
是安全性相关
的部分,只是为了保证Token 的安全性
,来防止别人破解token
里面的信息。
JWT
的使用方式
- 客户端收到服务器返回的
JWT
之后,通常会将它储存在localStorage
或sessionStorage
中。 - 此后,客户端每次与服务器通信,都要带上这个
JWT
的字符串,从而进行身份认证。推荐的做法是把JWT
放在HTTP
请求头的Authorization
字段中,格式如下:
fetch('api/user/1', { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库