• cookie、session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?


    HTTP是无状态的,也就是说你这次访问了服务器,关闭网页,再次访问服务器,服务器是没有意识到又是你来访问,那怎么保持登录状态呢?
    设置让用户可以选择记住用户名和密码,但是把密码交给浏览器,如果电脑被黑了,浏览器里记录的信息就会很危险, 即使我们自己不需要亲自输入用户名密码,浏览器还得想办法帮我们在每一次请求里加入用户名密码,这项技术就是cookie
    cookie的基本流程:浏览器发起HTTP请求,服务器会进行cookie设置,也就是set-cookie,cookie发给浏览器之后,浏览器会保存起来,这样浏览器以后发送的每一个请求都会自动附上这个cookie,我们打开浏览器是可以看到保存了哪些cookie,也就是说如果把用户名和密码放在cookie是很不安全的,只要电脑被黑,在cookie里的重要信息就会被泄漏,于是就有了新的技术session
    如果有多台服务器,一台服务器存储了sessionid,又面临需要分享session id给其他服务器
    jwt json web token
    http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html(阮一峰)
    header.payload.signature
    算法 特定数据(有效期) 签名
    使用方式
    方式一
    放在HTTP请求头信息的Authorization字段,使用Bearer模式添加JWT
    方式二
    放在post请求的数据体里
    方式三
    通过url传输
    生成的token客户端以cookie或者storage的方式进行存储,cookie需要解决跨域问题
    token和jwt的区别
    token:服务端验证客户端发送过来的token时,还需要查询数据库获取用户信息,然后验证token是否有效
    jwt:将token和payload加密后存储于客户端,服务端只需要使用密钥解密进行校验即可,不需要查询或者减少查询数据库,因为jwt自包含了用户信息和加密的数据。
    如何保证token在客户端的安全性?
    header和payload的信息会被base64编码,虽然jwt不保存在服务器这里,但是服务器需要保存一段密码,这段编码需要结合着两段编码进行算法运算,最终得到签名信息。这里使用的算法就是刚刚header声明的算法,签名的信息也就是signature部分了,这样一个完整的jwt就可以发给客户端了
    如何解决跨域问题?
    nginx代理跨域
    nginx反向代理,通过配置一下参数
    在go中,跨域中间件也是通过配置请求头参数

  • 相关阅读:
    Qt在线安装教程(详细图文)
    redis部署与管理
    Linux-本地日志服务管理(rsyslog基础)
    Mac上安装Mysql8.0修改my.cnf配置文件(忽略大小写)
    centos 普通用户操作 supervisor 报错
    RFSoC应用笔记 - RF数据转换器 -05- RFSoC关键配置之RF-ADC内部解析(三)
    不完全解构和剩余运算符
    golang平滑重启库overseer实现原理
    算法学习和实践 0.算法基础
    Springboot毕设项目餐厅后勤管理系统cxjgl(java+VUE+Mybatis+Maven+Mysql)
  • 原文地址:https://blog.csdn.net/m0_49049914/article/details/125470566