前后端分离部署的好处很多,不必赘述。 前后端分离部署之后的结构应该是:
- 前端代码和后端代码部署在不同的服务器上
- 通过api进行数据交互
数据交互过程中要特别处理一个问题:权限控制。
现在最常用的鉴权方式是Token验证,大致流程如下:
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
- 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
基于Token的验证方式比较灵活,现成的解决方案有JWT,一般公司都会专门做一些鉴权服务,用它来统一向多个服务进行鉴权。
问题提出
初始结构如下:
要解决的问题:如何考虑鉴权的情况来实现前后端分离部署
方案一
方案特点:
- Node服务层负责跟鉴权服务器交互,主要是转发验证请求到鉴权服务器
- 后端服务器不需要跟鉴权服务器交互,当有多个后端服务器时,可以把后端服务跟鉴权服务器之间的互动工作省掉
- 缺点:不同后端服务之间在调用时,没有安全保护
方案二
方案特点:
- 每个后端服务都整合鉴权服务接口
- 前端和后端服务之间直接调用,可以极大的保证安全
- 后端服务之间也需要通过鉴权服务(API Gateway)
- 缺点: 每个后端服务都要整合鉴权服务,比较麻烦