一、JWT概念
json web token
二、JWT与原始token的区别
JWT是对原始security的oauth2 token的增强。
原始的token只是一个uuid,没有任何意义。
JWT包含了部分业务信息,减少了token验证等交互操作,效率更高。
三、JWT的特点
- 自包含:包含有意义的信息。但由于其信息能被公开看到,所以jwt并不能放特别敏感的业务信息。
- 含有签名:防止jwt自身被修改
- 可扩展:可自定信息
三、JWT的签名
JWT是如何做到防止内容被篡改? 答案就是数字签名。
JWT内容是由三部分组成:Header、PayLoad、Signature。
Header里存的是:token类型和加密算法,此处的加密算法是签名的加密算法
PayLoad里面存的是:具体的业务数据比如用户id等等
Signature:具体的数字签名密文信息
举个例子,jwt内容如下:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImp0aSI6IjMyMWU1MzlmLTJmY2MtNDcwNy05YWMyLTI1ZmY5MTkzZTI4ZiIsImlhdCI6MTU3MTc5ODgwNiwiZXhwIjoxNTcxODAyNDA2fQ.3pNLP8HvSu5hKFATOeJIR1Tpo5hxDB4Pcz6mK1lsTFU
其内容由三个“.”隔开,由base64编码,分别对应的就是header、payload、signature。
通常我们使用jwt时候采用RS256 公钥/私钥 方式进行签名的 加密/解密,因为RS256是非对称加密,比较安全。
因为jwt是由服务端生成并发放的,其中签名是由服务端的私钥加密而成的,只要保证了私钥的安全,就能保证签名是安全的。
当别人拿着jwt访问我们的服务时,可以有以下验证方式:
我们服务端拿到header和payload的信息,通过header里的加密算法拿着我们自己的私钥对payload生成一个签名对比jwt传过来的签名,如果签名一致,说明payload的信息没有被修改。
-------------------------------------------------------------------------------------------------------------------------------
以上为我的理解,以后接着补充,如有错误,欢迎指正。