Node.js(六)
Node.js第六天 前后端的身份认证
一、web开发模式
1、主流的 Web 开发模式
基于客户端渲染的方式
基于服务端渲染的方式
2、服务端渲染概念
服务端直接把数据动态拼接到 HTML 字符串中, 再把完整的 HTML 页面数据发送给客户端, 这样浏览器就可以直接渲染页面, 不需要进行 Ajax 请求的操作了
3、服务端渲染的优点
前端渲染更快, 用户体验更好 (不需要首次等待 Ajax 发送请求的过程)
有利于 SEO 搜索引擎读取权重词汇 (服务端响应的是完整带标签的 HTML 内容, 百度等爬虫更容器读取信息)
4、服务端渲染的缺点
需要额外的服务器资源, 以及完善的运维体系去管理
不利于前后端分离, 由于页面是在服务端进行输出的, 需要前端的代码和 Node.js 服务端部署在一起
5、前后端分离的开发模式
依赖于 Ajax 技术的广泛运用, 后端只负责提供 API 接口, 前端使用 Ajax 调用接口渲染页面的开发模式
6、前后端分离的优点
(1) 开发体验好, 各司其职, 效率更高
(2) 用户体验好, Ajax 可以在不刷新页面的情况下实现局部更新, 配合 loading 效果体验度较好
(3) 减轻服务端的渲染压力, 因为页面最终是在每个用户的浏览器中生成的
7、前后端分离的缺点
(1) 前端渲染耗时, 首屏渲染的体验度不高
(2) 不利用 SEO 搜索引擎优化
二、身份认证
1、身份认证技术
身份认证(Authentication) 又叫 “鉴权”, “权限验证”, “身份验证”, 是指通过一定的手段, 完成用户身份的确认
例如: 火车票检票, 微信支付密码等生活场景
Web 开发中的邮箱验证, 短信验证码, 滑动验证码等方式
2、为什么需要身份认证
网站的内容如果涉及到隐私性, 安全性 和 交易性, 即需要身份认证的机制来确保安全
3、不同开发模式下的身份任证
(1) 服务端渲染的推荐使用 Session 认证机制
(2) 前后端分离推荐使用 JWT 认证机制
4、HTTP 协议的特点
HTTP 本身是一个无状态的协议, 它不会记录每次发送请求的用户信息, 这会导致服务器无法识别哪个用户发送了请求
如何解决上述的问题?
可以借助 cookie 和 session 两种技术来存储用户的状态
三、Cookie技术
1、什么是 Cookie?
Cookie 是存储在用户浏览器的一段不超过 4KB 的字符串, 它是由一个名称(Name) 和 值(Value) 以及其他几个用于控制 Cookie 有效期, 安全性, 使用范围的可选属性组成的
2、Cookie 的作用
不用域名下的 Cookie 信息是独立的, 每当客户端发送请求时, 会自动把当前域名下所有未过期的 Cookie添加到请求头, 一同发送到服务器
3、Cookie 的特性
(1) 自动发送
(2) 域名独立
(3) 过期时限
(4) 4 KB限制
4、Cookie 的工作机制
客户端(浏览器)第一次发送请求到服务器, 服务器会以响应头的形式向浏览器写入 Cookie 保存, 之后浏览器每次发送请求到服务器都会自动将 Cookie 以请求头的形式发送过去
Cookie的更多操作: https://www.runoob.com/js/js-cookies.html
5、Cookie 技术的缺点
Cookie 是存储在浏览器端的, 并且浏览器本身提供了读写 Cookie 的方法, 因此 Cookie 信息很容易被窃取和伪造,重要的隐私信息不建议存放在 Cookie 中
6、如何解决上述的缺点
使用 Session 方案, 用户的状态信息在服务器生成和存储, 浏览器只负责保留一个 sessionID 秘钥, 每次发送请求时携带这个 sessionID 到服务器, 服务器根据这个唯一的 id 值查询对应的用户信息进行返回
四、Session技术
1、Session 认证的局限性
SessionID 需要借助 cookie 手段存放在浏览器, 当涉及到前端跨域请求后端接口的时候, 需要做额外的配置,才能实现 Session 的认证
2、如何解决上述的缺点
当前端跨域请求后端接口时, 推荐使用 JWT 这种认证方式, 没有和 Cookie 的绑定关系
3、什么是 JWT (JSON Web Token)?
基于token的鉴权机制, 是前端目前最流行的跨域认证解决方案
五、JWT的工作机制
1、JWT 的认证机制
用户信息通过加密签名后 token 字符串的形式, 保存在客户端浏览器中. 服务器通过解密客户端传来的 token 字符串来认证用户的身份
2、JWT 的组成部分
通常由三部分组成, 使用英文符号.进行分隔: Header.Payload.Signature
Header: 头部
Payload: 有效荷载, 这里存放的是经过加密后的用户信息
Signature: 签名
3、JWT 使用方式
服务端签发 TOKEN 到客户端后, 可以存储到 localStorage 中, 每次发送请求前都要带上这个 TOKEN, 推荐放在HTTP 请求头的 Authorization 字段中 (大事件项目中处理方式一致)
在 Node.js项目中使用 JWT:
先安装 JWT 包
npm i jsonwebtoken express-jwt
说明: jsonwebtoken 用于生成 Token 字符串信息; express-jwt 用于把 Token 字符串解析为 JSON 对象
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!