常见的跨域认证方式:
Session-Cookies
Toekn验证(包括jwt、SSO)
OAuth2.0(开放授权)
Session-Cookies实现方式:
- 用户通过POST请求向服务器发送账号密码
- 服务器验证通过之后,在当前对话session中保存相应的数据,如用户角色、登录时间等
- 服务器向用户返回一个session_id,写入用户的cookies
- 用户随后的每一次请求,都会通过cookies,将session_id,传给服务器
- 服务器收到session_id,找到前期保存的数据,由此知道用户的身份。
这个流程在单机的时候没有问题,但是当服务器变为集群的时候,或者跨域的服务器的时候,Session就必须进行数据共享。
Cookies存在问题,容易被csrf攻击,解决攻击的方法:
- 提交Form表单时,添加本域才能获取验证消息
- CSRF-Token
- 防止不明外部域名的访问
- 同源检测
- Samesite Cookies
考虑每台服务器如何实现对Session的共享?
方式一:实现Session数据的持久化。当各种服务收到请求后,都向数据持久层请求数据,来验证是否是正确的用户。但是无论将Session存在服务器哪里都会带来额外的负担。这种方案的优点就是简单,但是扩展性不好,安全性较差。【】
方式二:使用JWT的方式。所有的数据都不保存在服务器端,而是保存在客户端,用户每次的请求都携带上Token令牌。
JWT
JSON Web Toekn(JWT)是一个开放标准,它定义了一种紧凑且自包含的方式。
用途最多的地方就是授权
单点登录SSO也是广泛使用JWT的一项功能。
JWT的数据结构
- Header头部
- Payload负载
- Signature
xxxx.yyyyyy.zzzz