image-20240325083940667

常见的跨域认证方式:

  • Session-Cookies

  • Toekn验证(包括jwt、SSO)

  • OAuth2.0(开放授权)

Session-Cookies实现方式:

  1. 用户通过POST请求向服务器发送账号密码
  2. 服务器验证通过之后,在当前对话session中保存相应的数据,如用户角色、登录时间等
  3. 服务器向用户返回一个session_id,写入用户的cookies
  4. 用户随后的每一次请求,都会通过cookies,将session_id,传给服务器
  5. 服务器收到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

img