Featured image of post JWT跨域

JWT跨域

仅供参考

用户认证一般流程 用户向服务器发送用户名和密码 服务器验证通过后,在当前对话(session)保存相关数据,比如登录时间 服务器返回一个session_id,写入用户的cooKie 用户之后的每一次请求,都会通过cookie,将session_id传回服务器 服务器根据session_id,找到之前保存的数据,得知用户身份

但是这样session扩展性不好,多台服务器如何共享session 每次请求服务,分配的服务器可能不同 ①session持久化,写入数据库 ②数据保存在客户端,每次请求都发回服务器,Token认证就是代表

Token是服务端产生的字符串,是客户端访问资源节课(API)所需的资源凭证, 客户端使用用户名和密码,服务端收到请求,验证 验证成功,服务器会签发一个token病把这个token发送给客户端 客户端收到token后,会存起来,放到cookie或者localstorage 客户端每次请求服务器都要带这个签发的token(令牌) 服务端收到请求,去验证token,验证成功就返回它请求的数据

token方法服务器不存数据,因此减轻压力 但是解析token需要时间,因此用时间换空间 token由应用管理,可以避开同源策略

JWT是JSON Web Token JWT原理是,服务器认证后,生产一个json对象,发回给用户 {“姓名”:’111‘, “角色”:‘root’, “到期时间”:‘2022-2-2-0:0’ } 每次通信,都要发回这个json对象,服务器完全靠这个认证用户身份 为了防止用户篡改,会生产对象时加上签名

JWT有3部分 header头部 payload负载 signature签名 最终组合为一个字符串,用.分开 Header部分是一个json对象,描述JWT的元数据,例如签名算法“alg”:“HS256”,令牌类型‘type’:‘JWT’ payload也是json,存实际需要传递的数据选用,客户也看得到 signature只有服务器知道,利用签名header的签名算法生成签名

JWT可以存在cookie也可以存在localSTORAGE 但是这样不能跨域 所以最好放在HTTP请求的头信息“authorization”

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计