本篇主要分享的是JWT的基础的知识点和token的生成,生成使用的加密算法是ES256。
缘由:
- 最近在工作中处理的业务是和Apple交互的,由于Apple那边的规定每次请求需要携带token,来证明身份。我研究了一下JWT,也是有一些自己的理解,拿出来分享,希望可以给看到的人一些帮助。
Apple给出的生成token的URL:
https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests
JWT的官方:
理解:
- JWT只是一个简称,全称是:Json Web Token,JWT是由头部、载荷、签名三部分组成拼接的方式用.,作为分割。
Header 头部:用来描述该JWT的基本信息,头部包含了两部分(1、token的类型,加密的方式。)
Payload 载荷:用来存放其他信息。如:ID,token过期时间,iss签发者,这类信息。
Signature 签名:将头部和载荷使用base64编码过后,用.拼接(头部在前),然后我们会将拼接后的字符串。使用HS256或者其他的加密算法进行加密。加密的过程中,需要提供一个密钥。 最后生成最后一部分字符串,就是签名。签名还有另一种作用,防止信息被篡改。头部和载荷使用都是base64进行编码的,所以安全程度并不高,如果有人拦截了信息,并篡改了我们传递中的信息,并且新生成了一个JWT。那么我们接收到的jwt签名就是不一样的。 - JWT优势和劣势:
优势:JWT想比较session,session的验证用户方式是,将用户的信息存入服务器端,所以会占据大量的内存。而JWT的方式确实将用户的信息分散到客户端,可以减轻服务器内存的压力,虽然JWT会让服务器有一些计算的压力,但是这些计算压力相比起来内存占用,就不算什么了。
劣势:JWT一旦生成,只有过期时间到了,这个token才能无效,及时中间不想使用了,这个token依旧有效。 - JWT的工作流程:
1、浏览器发起请求登陆。2、服务端验证身份,根据算法,将用户标识符打包生成 token, 并且返回给浏览器。3、浏览器发起请求获取用户资料,把刚刚拿到的 token 一起发送给服务器。4、服务器发现数据中有 token,验明正身。5、服务器返回该用户的用户资料。