手机网站 兼容,建设摩托车所有车型,黄页营销网站,wordpress上传视频只有声音JWT认证机制
官方文档
JWT文档
原理简介
客户端通过服务端认证之后#xff0c;由服务端返回一个JSON对象#xff0c;发回到客户端。客户端保存该对象用于以后服务器访问凭据#xff0c;服务端完全依赖该JSON对象来验证客户端的身份。由于JSON数据容易被篡改#xff0c;…JWT认证机制
官方文档
JWT文档
原理简介
客户端通过服务端认证之后由服务端返回一个JSON对象发回到客户端。客户端保存该对象用于以后服务器访问凭据服务端完全依赖该JSON对象来验证客户端的身份。由于JSON数据容易被篡改因此在服务器生成该对象之后会对该对象进行签名防止数据被篡改。JWT token校验基于token本身携带的内容和密钥
应用场景 充当认证令牌替代传统的session数据存储通过jwt完全的依赖客户端保存认证信息 基于jwt可携带数据的特性可将其用于数据传输、信息交换的场景
JWT构成
jwt结构分为三个部分Header、Payload、Signature HeaderAlgorithm算法即签名算法。 Payload存储信息的JSON对象 SignaturePayload基于Header指定算法的签名结果 Header与Payload部分本身并没有被加密而是做了Base64URL 编码。 Base64URL与Base64算法类似Base64中、/和 在URL中有特殊含义因此Base64URL 对它们做了处理
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ如上面的例子所示JWT就是一个字符串由三部分构成
Header头部Payload数据Signature签名
header
JWT的头部承载两个信息
声明类型这里是JWT声明加密的算法
{typ: JWT,alg: HS256
}然后将头部进行Base64编码该编码是可以对称解码的构成了第一部分。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9payload
载荷就是存放有效信息的地方。定义细节如下
iss令牌颁发者。表示该令牌由谁创建该声明是一个字符串
sub: Subject Identifieriss提供的终端用户的标识在iss范围内唯一最长为255个ASCII个字符区分大小写
audAudience(s)令牌的受众分大小写的字符串数组
expExpiration time令牌的过期时间戳。超过此时间的token会作废 该声明是一个整数是1970年1月1日以来的秒数
iat: 令牌的颁发时间该声明是一个整数是1970年1月1日以来的秒数
jti: 令牌的唯一标识该声明的值在令牌颁发者创建的每一个令牌中都是唯一的为了防止冲突它通常是一个密码学随机值。这个值相当于向结构化令牌中加入了一个攻击者无法获得的随机熵组件有利于防止令牌猜测攻击和重放攻击。
aud(audience): 受众
nbf(Not Before): 生效时间也可以新增用户系统需要使用的自定义字段
然后将其进行Base64编码得到Jwt的第二部分
JTdCJTBBJTIwJTIwJTIyc3ViJTIyJTNBJTIwJTIyMTIzNDU2Nzg5MCUyMiUyQyUwQSUyMCUyMCUyMm5hbWUlMjIlM0ElMjAlMjJKb2huJTIwRG9lJTIyJTBBJTdESignature
这个部分需要Base64编码后的Header和Base64编码后的Payload使用 . 连接组成的字符串然后通过Header中声明的加密方式进行加密$secret 表示用户的私钥然后就构成了jwt的第三部分。
// javascript
var encodedString base64UrlEncode(header) . base64UrlEncode(payload);
var signature HMACSHA256(encodedString, $secret);将这三部分用 . 连接成一个完整的字符串就构成了 jwt
JWT几个特点
JWT 默认是不加密不能将秘密数据写入 JWT。JWT 不仅可以用于认证也可以用于交换信息。有效使用 JWT可以降低服务器查询数据库的次数。JWT 的最大缺点是由于服务器不保存 session 状态因此无法在使用过程中废止某个 token或者更改 token 的权限。也就是说一旦 JWT 签发了在到期之前就会始终有效除非服务器部署额外的逻辑。JWT 本身包含了认证信息一旦泄露任何人都可以获得该令牌的所有权限。为了减少盗用JWT 的有效期应该设置得比较短。对于一些比较重要的权限使用时应该再次对用户进行认证。为了减少盗用JWT 不应该使用 HTTP 协议明码传输要使用HTTPS 协议传输。
加密和签名的区别
加密是可逆的签名是不可逆的非对称加密公钥加密私钥解密非对称签名私钥签名公钥验签同样的算法对数据做签名得到的签名是一样的